第五章--Java多线程和并发编程 第四节--Java多线程管理
多线程管理(1):
线程类:
通过继承Thread或实现Runnable
通过start方法,调用run方法,run方法工作
线程run结束后,线程退出
粗粒度:子线程与子线程之间、和main线程之间缺乏同步
细粒度:线程之间有同步协作(让线程等待、线程发通知 / 唤醒线程、终止某个线程)
多线程管理(2):
线程的全部状态:
---- NEW:刚刚创建(new),当一个线程对象被new出来的时候,只是在内存里占据一定空间,但是没有被运行起来,因为start方法还没有启动
---- RUNNABLE:就绪态(start),调用线程的start方法,这个线程就进入了一个就绪态,它准备好运行了,但是还没有运行,因为他要等待CPU降临到它头上来了
---- RUNNING:运行中(run),在线程进入就绪态时,且被CPU挑中后,就会进入运行状态,run方法就正式地启动了(start方法和run方法中间的这段时间就是线程等待CPU调度的时间,CPU在这个线程对象执行完一个时间片之后,就把这个线程对象放下来去执行另一个线程对象,从运行态变成就绪态)
---- BLOCK:阻塞(sleep),由于某种条件还没有满足,暂时不需要CPU了,就进入了一个BLOCK状态,这是比就绪态还要更差的状态,它就等待那个条件满足
---- TERMINATED结束,意味着一个线程被终止了
多线程管理(3):
Thread的部分API已经废弃
----暂停和恢复 suspend / resume
---- 消亡 stop / destroy
可以使用的API:‘
---- sleep,时间一到,自己会醒来(休眠时进入block状态,休眠结束进入runnable就绪态)
---- wait / notify / notifyAll,等待,需要别人来唤醒
---- join,当前线程等待另外一个线程结束
---- interrupt,线程向另外一个线程发送中断信号(你可以停止了),当另外一个线程收到信号,会触发InterruptedException异常(可解除阻塞),并进行下一步处理(终止或者别的操作)
举个例子:生活者和消费者问题