线程之间协作

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

 

posted @ 2019-10-13 21:03  wmqiang  阅读(124)  评论(0编辑  收藏  举报