网上看到的多是用synchronized块实现,但我感觉用synchronized修饰方法就能实现
通过利用同一目标对象的共享变量flag和i实现交替打印,while(i<50)是让循环一致进行下去,if(flag= )符合条件就打印并且flag和i改变,下次循环就不符合条件(就等待了);不符合条件就等待,就轮到其他线程执行。
目标对象类
public class Print implements Runnable{
boolean flag=false;
int i=1;
@Override
public void run() {
oddoreven(Thread.currentThread().getName());
}
private synchronized void oddoreven(String name) {
if(name=="a") {
while(i<50) {
if(flag==false) {
System.out.println("a"+i);
i++;
flag=true;
notifyAll();
}
else
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
else if(name=="b") {
while(i<50) {
if(flag==true) {
System.out.println("b"+i);
i++;
flag=false;
notifyAll();
}
else
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
主函数类:
public class TurnPrint {
public static void main(String[] args) {
Print print=new Print();
Thread a=new Thread(print);
a.setName("a");
Thread b=new Thread(print);
b.setName("b");
a.start();
b.start();
}
}
运行结果: