线程之间协作
一、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本身不释放锁,但是整个方法块执行完后会释放锁:

打听下这个变量名谁起的

浙公网安备 33010602011771号