这是一道Java多线程面试题,使用3个线程程序,依次打印ABCABCABCAB......

意思是我们使用3个线程按照ABC的顺序打印N次。这里给一个实现思路,ABC的ASCII码是顺序的65,66,67,我们需要有个一个计数count,然后使用65加上这个count对3取余就可以得到ABC,然后不断的循环即可。

代码如下:

 public class HelloWorld implements Runnable {
    public final static String lock = "lock";

    public static int count = 0;

    @Override
    public void run() {
        while(true)
        {
            synchronized (lock){
                lock.notifyAll();
                int asic = 65+count%3;
                System.out.print((char) asic);
                count++;
                //线程退出
                if (Thread.currentThread().isInterrupted()) {
                    break;
                }
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
    public static void main(String[] args) throws InterruptedException {
        Runnable myTask = new HelloWorld();
        Thread task1 = new Thread(myTask);
        Thread task2 = new Thread(myTask);
        Thread task3 = new Thread(myTask);
        task1.start();
        task2.start();
        task3.start();

        while(true){
            if (count >10) {
                task1.interrupt();
                task2.interrupt();
                task3.interrupt();
                break;
            }
        }
    }
} 

测试一下

输出

ABCABCABCABCAB

 上面的例子中使用了线程退出的方法