【发布时间】:2018-12-02 06:08:59
【问题描述】:
我一直在阅读 Herbert Schildt 的“The Complete Reference”一书中的 Java 实践。
在本书的线程章节中,有一个线程间通信部分。
一本边书说,在当前线程终止之前,任何线程都不会执行实例的其他同步方法,但请看下面的程序。
在输出中,它执行了两种同步方法,有人怎么能解释发生了什么?
输出:
放:0
放:1
放:2
放:3
放:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
得到:4
class Main{
public static void main(String args[]){
Q q=new Q();
Producer p=new Producer(q);
Consumer c=new Consumer(q);
}
}
class Q {
int n;
synchronized int get(){
System.out.println("get :"+n);
return n;
}
synchronized void put(int n){
this.n=n;
System.out.println("put :"+n);
}
}
class Producer implements Runnable{
Q q;
Producer(Q q){
this.q=q;
new Thread(this,"Producer").start();
}
public void run(){
int i=0;
while(true){
q.put(i++);
}
}
}
class Consumer implements Runnable{
Q q;
Consumer(Q q){
this.q=q;
new Thread(this,"Consumer").start();
}
public void run(){
while(true){
q.get();
}
}
}
【问题讨论】:
-
请添加有问题的输出
-
等一下,我也更新了程序。
-
输出已添加
标签: java multithreading monitor