现在我们来看看多线程的问题,先看下下面的代码
这是两个线程分别执行两个run方法
public class Test8 {
public static void main(String[] args) {
new Thread(new in(new Resource2())).start();
new Thread(new out(new Resource2())).start();
}
}
class in implements Runnable{
Resource2 r;
in(Resource2 r){
this.r=r;
}
public void run(){
while(true){
r.set();
}
}
}
class out implements Runnable{
Resource2 r;
out(Resource2 r){
this.r=r;
}
public void run(){
r.get();
}
}
class Resource2 {
private String name;
private int count=1;
boolean flag=false;
public synchronized void set() {
while(flag){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"----"+count++);
flag=true;
notify();
}
public synchronized void get() {
while(!flag){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"---"+(--count));
flag=true;
notify();
}
}
结果是只有一个线程执行了一次,结果如下:
Thread-0----1
原因是什么呢?