多线程按顺序依次打印ABCD---java多线程的一道经典面试题

这是java多线程的一道经典面试题,要求使用4个线程依次打印ABCDABCDABCD...

package web1;

import java.util.concurrent.atomic.AtomicInteger;

public class Main1 {

    public static void main(String[] args) {
        AtomicInteger count = new AtomicInteger(0);
        int runCount = 4;
        ThreadTest3 t1 = new ThreadTest3(count, "A",0,runCount);
        ThreadTest3 t2 = new ThreadTest3(count, "B",1,runCount);
        ThreadTest3 t3 = new ThreadTest3(count, "C",2,runCount);
        ThreadTest3 t4 = new ThreadTest3(count, "D",3,runCount);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

线程类代码:

package web1;

import java.util.concurrent.atomic.AtomicInteger;

public class ThreadTest3 extends Thread {
    private AtomicInteger count ;
    private String word=null;
    private int order;
    private int runCount;
    public ThreadTest3(AtomicInteger count,String word,int order,int runCount){
        this.count=count;
        this.word=word;
        this.order=order;
        this.runCount=runCount;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (count) {
                if (count.get()%runCount==order) {
                    System.out.println(word+","+count.get());
                    count.getAndAdd(1);
                    count.notifyAll();
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }                    
                } else {
                    try {
                        count.wait();
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        }
    }
}




你可能感兴趣的:(多线程)