Java轮流打印字符

来源:互联网 发布:javascript 获取元素 编辑:程序博客网 时间:2024/06/08 05:48


两个线程轮流打印A、B

public class ThreadDemo {    public static void main(String[] args) {        Thread t1 = new TT("A");        Thread t2 = new TT("B");        t1.start();        t2.start();    }}class TT extends Thread {    private static Object LOCK = new Object();    private String mName;    private boolean flag;    public TT() {    }    public TT(String name) {        this.mName = name;    }    @Override    public void run() {        for (int i = 0; i < 10; i++) {            synchronized (LOCK) {                System.out.println(mName);                flag = !flag;                LOCK.notify();                if (i < 10) {                    try {                        LOCK.wait();                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }// end of synchronized        }// end for    }// end run}


三个线程轮流打印 A、B、C


import java.util.concurrent.atomic.AtomicInteger;public class TestAsynTreadXunlei {    public static void main(String argv[]) {        AtomicInteger synObj = new AtomicInteger(0);        TestPrint a = new TestPrint(synObj, "A", 0);        TestPrint b = new TestPrint(synObj, "B", 1);        TestPrint c = new TestPrint(synObj, "C", 2);        a.start();        b.start();        c.start();    }}class TestPrint extends Thread {    private AtomicInteger synObj;    private String name;    private int flag;    private int count = 0;    public TestPrint(AtomicInteger synObj, String name, int flag) {        this.synObj = synObj;        this.name = name;        this.flag = flag;    }    @Override    public void run() {        while (true) {            synchronized (synObj) {                if (synObj.get() % 3 == flag) {                    synObj.set(synObj.get() + 1);                    System.out.println(name);                    count++;                    synObj.notifyAll();                    if (count == 10) {                        break;                    }                } else {                    try {                        synObj.wait();                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }    }}



0 0