复习:
1.实现多线程的方法到底有1种还是2种还是4种?
2.怎样才是正确的线程启动方式?
3.如何正确停止线程?(难点)
4.线程的一生-6个状态(生命周期)
学习目标:
1.为什么线程通信的方法wait(),notify()和notifyAll()被定义在Object类?而sleep定义在Thread类里?
2.用3种方式实现生产者模式
3.JavaSE8和Java1.8和JDK 8 是什么关系,是同一个东西吗?
4.Join 和sleep和wait期间线程的状态分别是什么?为什么?
wait,notify,notifyAll
阻塞阶段->唤醒阶段->
在执行上述几种方法时,首先,我们是必须得先得到monitor即获得synchronized锁。才能执行上述几种方法。
其次,我们只能释放其中一个锁。
最后,这些方法是任何对象都可以调用的。
在持有多把锁的时候,要注意,该如何释放,释放谁,释放的时间等等。
被唤醒的4种情况:
注意:wait只会释放,其自己的锁。
package ThreadCommonMethod; /** * @program:多线程和IO * @descripton:展示wait和notify的使用方法 * @author:ZhengCheng * @create:2021/9/17-13:05 **/ public class Wait { static Object object = new Object(); static class Thread1 extends Thread{ @Override public void run() { synchronized (object){ System.out.println(Thread.currentThread().getName()+"Begin"); try { object.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("线程"+Thread.currentThread().getName()+"获得了锁"); } } static class Thread2 extends Thread{ @Override public void run() { synchronized (object){ object.notify(); System.out.println("线程"+Thread.currentThread().getName()+"调用了notify"); } } } public static void main(St