等待:wait()方法让线程处于冻结状态,但不放线程执行资格。
唤醒:notify()方法唤醒一个线程,notifyAll()方法唤醒所有的线程,将线程池中等待的线程唤醒,通常唤醒第一个,而线程池中都存放着等待的线程。
线程间的通讯案例
class Resource
{
private String name;
private int count=1;
private boolean flag;
public synchronized void set(String name)
{
while(flag)
{
{
this.name=name+"::"+count++;
System.out.println(Thread.currentThread().getName()+"生产者"+name);
flag=true;
noyifyAll();
}
}
}
public synchronized void out()
{
while(!flag)
{
System.out.println(Thread.currentThread().getName()+"消费者"+name);
flag=flase;
notifyAll();
}
}
}
class Producer implements Runnable
{
private Resource r;
Producer(Resource r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.set("商品");
}
}
}
class Consumer implements Runnable
{
private Resource r;
Consumer(Resource r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.out();
}
}
}
class Demo
{
public static void main(String[] args)
{
Resource r= new Resource();
Producer pro= new Producer(r);
Comsumer con = new Consumer(r);
new Thread(pro).start();
new Thread(con).start();
new Thread(pro).start();
new Thread(con).start();
}
}
|
|