这是一道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
上面的例子中使用了线程退出的方法。