有如下例子:
public class Machine implements Runnable {
private int a = 1;

public void run(){
for(int i=0;i<10;i++) {
     synchronized(this) {
     a = a+i;
     try{
Thread.sleep(500);
     }catch(InterruptedException e){
e.printStackTrace();
     }
     a = a-i;
     System.out.println(Thread.currentThread().getName()+" : "+a);
}
}
}

public void go() {
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName()+" : "+i);
Thread.yield();
}
}

public static void main(String[] args){
Machine machine = new Machine();
Thread t1 = new Thread(machine);
Thread t2 = new Thread(machine);
t1.start();
t2.start();
machine.go();
}
}
上例的输出结果是:
main:0
main:1
main:2
main:3
main:4
main:5
main:6
main:7
main:8
main:9
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
Thread-0:1
Thread-1:1
为什么输出的结果是这个样子呢?为什么不是main主线程,t1,t2,轮流输出呢?在上例中红色标注的:Thread.yield()好像并没有起作用?请问这是为什么啊?还有一个问题:
在生产者-消费者问题中,notify()方法是随机唤醒对象的等待池中的一个线程,但是等待池中既有生产者也有消费者线程,那它是有可能唤醒生产者线程,也有可能唤醒消费者线程吗?
谢谢各位了,在线等~!