一、wait、notife、notifyAll
1、
2、
notify就发一个信号,随机给正在wait的线程中一个,不传递;
notifyAll发送给所有正在wait的线程信号;
条件允许,使用notifyAll,线程类中重写的run方法做好逻辑判断,使得创建出来的线程不会产生冲突就行;
3、实现代码
线程类:
3.1通知方
3.2等待方
3.3 主线程代码:
Thread.sleep() 是Thread的静态方法,使当前线程睡眠,被interrupt中断会报interruptException;
二、等待超时模式
等待超时后,不能让程序一直等待下去;
1、等待超时模式的数据库连接池线程类:
等待方和通知方:
2、主线程类和计数器
创建1000个线程,看下连接成功多少,连接超时多少;
三、join
线程插队,谁插队谁先执行,当前线程被插队之后等待插队的所有线程执行完之后才能执行,状态没变,还是执行态,并不是就绪状态;
1、join插队线程类
2、主线程:
前面线程插队到后面线程前面,main插在0前面,接着下一步0插在1前面(带着0自己前面的main),下一步1插在2前面(带着1自己前面的0和main)...
所以最后插队完毕之后,执行顺序也是main 0 1 2 。。。
四、
其中,schronized就是锁,内置锁;
notify本身不释放锁,但是整个方法块执行完后会释放锁: