某大型杀毒软件公司2014年4月份笔试试题解答,第三小题,用2种thread实现方法实现2个线程,具体要求见程序,请大家指出不足之处。
/* 程序来源:暑期实习生招聘
* 源文件名称:TestPrinter.java
* 要 点:
* 请用2中thread实现方法实现2个线程:
* A线程打印10次张三,B线程打印10次李四,要求:
* A:线程同时运行
* B:交替打印10次张三,李四
*/
public class TestPrinter{
public static void main(String[] args){
Printer p1 = new Printer();
Printer p2 = new Printer();
p2.flag = 1;
Thread A = new Thread(p1);
Thread B = new Thread(p2);
A.start();
B.start();
}
}
class Printer implements Runnable {
static Object o = new Object();
int flag = 0;
public void run(){
if(flag == 0){
synchronized(o){
for(int i=0;i<10;i++){
System.out.println("张三");
o.notify();
try{
o.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
o.notify(); //张三跳出循环后再通知一次李四,这样李四才会结束
}
}
if(flag == 1){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
synchronized(o){
for(int i=0;i<10;i++){
System.out.println("李四");
o.notify();
try{
o.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
}
}