在讲解高级多线程控制类之前,我们需要把前面的一点知识再补上:并且对比一下几种方法:
yield() 方法: 当前正在执行的线程(Running 状态),如果调用了yield方法,代表着它自愿的放弃了对CPU资源的占用,转化为runnable状态。
sleep(Time) : 线程休眠一段时间,但是休眠过程中仍然保持着对对象锁的占用
wait : 线程等待,会释放掉对对象锁的占用
join() : 一个线程使用了join方法,代表着必须等待着自己执行完毕,其他线程才能继续执行, 一般用于另一个线程启动之前调用, t 和 t1 是两个线程
t.start(); // Line 15
t.join(); // Line 16
t1.start();
interrupt(中断): 中断是一个信号量(true, false),会对sleep,wait,join起作用,线程会不断检测这个信号量,通过抛出InterruptedException对中断做出回应, 用于通知处于这些状态的线程可以从这些状态中走出来了,从而恢复线程
synchronized 是一种重量级的同步方式,多个线程一旦要同时访问某一synchronized块,就会发生等待,然后线程就得一致等下去,现在Java提供了机制进行并发的控制,在 java.util.concurrent 包下
补充的一个知识点: synchronized 修饰的成员变量应该是私有的,如果是共有的,就可以直接通过对象来调用进行修改了,synchronized 就不起作用了
接下来,我们简单介绍一下高级多线程控制类里的几个重要的类:
线程池(使用ThreadPoolExecutor创建线程池,而不是Executor创建线程池):