[code=java]package Thread;
public class ThreadAB extends Thread{
int i=0;
private static int count=0;
private static Object o=new Object();
public ThreadAB(String ID){
currentThread().setName(ID);
}
public void run() {
synchronized (o) {
while(true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(count%2==0&¤tThread().getName().equals("a")){
o.notify();
count++;
System.out.println("Thread--"+currentThread().getName()+"...."+count);
try {
o.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if (count%2==1&¤tThread().getName().equals("b")) {
o.notify();
count++;
System.out.println("Thread--"+currentThread().getName()+"...."+count);
try {
o.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) {
ThreadAB b=new ThreadAB("b");
ThreadAB a=new ThreadAB("a");
a.setName("a");
b.setName("b");
a.start();
b.start();
}
}[/code]设定一个两个线程的公共变量count。线程启动时第一件事情就是去获得该变量的值,线程a只能在变量为双数时执行,线程b只能在变量为单数时执行,执行完毕后将该数字加一并notify。虽然ab线程会去竞争该变量,但是当a执行完以后如果继续获得变量的控制权,因为数字已经变了。所以a线程继续notify,直到b获取该变量,执行后加一才能轮到a继续执行。 |