package javaRevise;
public class HuanxingThread
{
public static void main(String[] args)
{
HuanxingThread huanxingThread = new HuanxingThread();
Thread t1 = new Thread()
{
int i = 'a';
public void run()
{
try
{
i++;
System.out.println("我已经睡了");
System.out.println("i:"+i);
synchronized (this)
{
wait();
}
System.out.println("我被唤醒了");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
};
Thread t2 = new Thread()
{
public void run()
{
synchronized(this)
{
for (int i = 0; i <= 10; i++)
{
if(i == 0)
{
notify();
}
System.out.println(i);
}
}
}
};
t1.start();
t2.start();
}
}
题主wait(),notify()调用的是t1,t2对象中的方法,两者没有关系。
想要实现进程通讯,wait(),notify()需要是同一个对象的方法,新建一个对象obj,synchronized(obj),调用obj.wait(),obj.notify(),这样两个线程才能用同一个对象的锁。
你这两个线程压根就没关连啊,就是互不妨碍啊
t1一直在等待被唤醒
synchronized(this) 改成 synchronized(obj),其中Object obj = new Object;然后obj.wait(); obj.notify();
这样应该就可以了。
两个线程用同一把锁 锁个代码块应该能实现你要的效果
代码实例化线程使用了匿名内部类, 新开的线程持有锁对象不同造成的
wai 与notify只能针对同一个监视器锁进行,换言之,同步要使用同一个锁