线程通信三个方法
* wait();//一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器
* notify();//一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就会唤醒优先级较高的
* notifyAll();//一旦执行此方法,就会唤醒被wait的所有线程
*
* 注意
* 1.wait\notify\notifyAll只能出现在同步代码块或者同步方法中
* 2.wait\notify\notifyAll的调用者必须是同步代码块或同步方法中的同步监视器
/**
*
* 线程通信的例子,使两个线程打印1-100,线程1,线程2交替打印
* 线程通信三个方法
* wait();//一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器
* notify();//一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就会唤醒优先级较高的
* notifyAll();//一旦执行此方法,就会唤醒被wait的所有线程
*
* 注意
* 1.wait\notify\notifyAll只能出现在同步代码块或者同步方法中
* 2.wait\notify\notifyAll的调用者必须是同步代码块或同步方法中的同步监视器
*
*
* * @author orz
*/
public class CommunicationTest {
public static void main(String[] args) {
Number number = new Number();
Thread t1=new Thread(number);
Thread t2=new Thread(number);
t1.setName("线程一");
t2.setName("线程二");
t1.start();
t2.start();
}
}
class Number implements Runnable
{
private int number=1;
@Override
public void run() {
while (true)
{
synchronized (this)
{
//唤醒一个线程
notify();
if (number<=100)
{
System.out.println(Thread.currentThread().getName()+":"+number);
number++;
try {
//使得线程进入阻塞状态,释放锁
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else
{
break;
}
}
}
}
}