了解线程通信我们可以先去了解一下线程的生命周期
线程的生命周期
1.新建:当一个Thread类或器子类的对象呗创建的时候,新生的线程对象处于新建状态
2.就绪:出于新建状态被start()后,将进入线程队列等待分配cpu的资源
3.运行:当就绪的程序被调度并获得cpu的资源时,并进入到运行状态,run()定义了线程的操作和功能
4.阻塞:在耨中特殊情况下,被人为挂起或执行并输入输出操作是,让出cpu并临时中止自己的执行,进入阻塞状态
5.死亡:线程完成了他的全部工作或线程被提前强制性中止或出现异常导致结束
例题1:使用两个线程打印1-100,这两个线程要交替打印
涉及到三个方法:
wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器
notify():一旦执行此方法,就会唤醒被wait的一个线程,如果有多个被wait,则唤醒优先级高的
notifyAll():一旦执行此方法,就会唤醒全部被wait的线程
说明:1.该三个方法只能在同步代码块中或同步方法使用
2.这三个方法必须是同步代码块中或同步方法中的同一个同步监视器 *
3.这三个方法是定义在Object中的
代码实现
例题2: 生产者将产品交个店员,而消费者从店员这里取走产品, 店员一次只能持有固顶数量(20)的产品,如果生产者试图生产更多的产品,店员会 叫生产者停一下,如果店里有空位,则再通知生产,如果店里没有产品,店员会 叫消费者等一下,有产品了在通知消费者来取产品
product(生产者) Clerk(店员) Customer(消费者)
代码实现
然后在Clerk类里实现生成,和消费的两个方法