天天看點

Java并發筆記(一)

,1,

public class HelloRunnable implements Runnable {

    public void run() {

        System.out.println("Hello from a thread!");

    }

    public static void main(String args[]) {

        (new Thread(new HelloRunnable())).start();

}

2,

public class HelloThread extends Thread {

        (new HelloThread()).start();

3,

public class SleepMessages {

    public static void main(String args[]) throws InterruptedException {

        String importantInfo[] = {

            "Mares eat oats",

            "Does eat oats",

            "Little lambs eat ivy",

            "A kid will eat ivy too"

        };

        for (int i = 0; i < importantInfo.length; i++) {

            //Pause for 4 seconds

            Thread.sleep(4000);

            //Print a message

            System.out.println(importantInfo[i]);

        }

4,

public class SimpleThreads {

    //Display a message, preceded by the name of the current thread

    static void threadMessage(String message) {

        String threadName = Thread.currentThread().getName();

        System.out.format("%s: %s%n", threadName, message);

    private static class MessageLoop implements Runnable {

        public void run() {

            String importantInfo[] = {

                "Mares eat oats",

                "Does eat oats",

                "Little lambs eat ivy",

                "A kid will eat ivy too"

            };

            try {

                for (int i = 0; i < importantInfo.length; i++) {

                    //Pause for 4 seconds

                    Thread.sleep(4000);

                    //Print a message

                    threadMessage(importantInfo[i]);

                }

            } catch (InterruptedException e) {

                threadMessage("I wasn't done!");

            }

        //Delay, in milliseconds before we interrupt MessageLoop

        //thread (default one hour).

        long patience = 1000 * 60 * 60;

        //If command line argument present, gives patience in seconds.

        if (args.length > 0) {

                patience = Long.parseLong(args[0]) * 1000;

            } catch (NumberFormatException e) {

                System.err.println("Argument must be an integer.");

                System.exit(1);

        threadMessage("Starting MessageLoop thread");

        long startTime = System.currentTimeMillis();

        Thread t = new Thread(new MessageLoop());

        t.start();

        threadMessage("Waiting for MessageLoop thread to finish");

        //loop until MessageLoop thread exits

        while (t.isAlive()) {

            threadMessage("Still waiting");

            //Wait maximum of 1 second for MessageLoop thread to

            //finish.

            t.join(1000);

            if (((System.currentTimeMillis() - startTime) > patience) &&

                    t.isAlive()) {

                threadMessage("Tired of waiting!");

                t.interrupt();

                //Shouldn't be long now -- wait indefinitely

                t.join();

        threadMessage("Finally!");

5,

public class SynchronizedCounter {

    private int c = 0;

    public synchronized void increment() {

        c++;

    public synchronized void decrement() {

        c--;

    public synchronized int value() {

        return c;

public void addName(String name) {

    synchronized(this) {

        lastName = name;

        nameCount++;

    nameList.add(name);

public class MsLunch {

    private long c1 = 0;

    private long c2 = 0;

    private Object lock1 = new Object();

    private Object lock2 = new Object();

    public void inc1() {

        synchronized(lock1) {

            c1++;

    public void inc2() {

        synchronized(lock2) {

            c2++;

6,

public class Deadlock {

    static class Friend {

        private final String name;

        public Friend(String name) {

            this.name = name;

        public String getName() {

            return this.name;

        public synchronized void bow(Friend bower) {

            System.out.format("%s: %s has bowed to me!%n", 

                    this.name, bower.getName());

            bower.bowBack(this);

        public synchronized void bowBack(Friend bower) {

            System.out.format("%s: %s has bowed back to me!%n",

    public static void main(String[] args) {

        final Friend alphonse = new Friend("Alphonse");

        final Friend gaston = new Friend("Gaston");

        new Thread(new Runnable() {

            public void run() { alphonse.bow(gaston); }

        }).start();

            public void run() { gaston.bow(alphonse); }

本文轉自Phinecos(洞庭散人)部落格園部落格,原文連結:http://www.cnblogs.com/phinecos/archive/2008/05/05/1184040.html,如需轉載請自行聯系原作者