过程和线程
各过程是独立的,而各线程则不肯定,同一过程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的治理和爱护;而过程正相反。
为什么要用多线程
单核时代,为了进步cpu和io设施的综合利用率,一个线程执行cpu计算时,另一个线程进行io操作。
多核时代,为了进步cpu利用率,使多个外围都被应用到。
线程的生命周期和状态
new 初始状态
new-(Thread.start())->runnable
runnable 运行状态(蕴含running运行中 和 ready就绪)
running -(yield()、系统调度)->ready
ready -(系统调度取得工夫片)->running
blocked 阻塞状态
running --(期待进入synchronized办法或synchronized块)--> blocked
blocked --(获取到锁)--> running
waiting 期待状态 示意以后线程须要其余线程做出动作(告诉或中断)
running --(object.wait(),thread.join(),lockSupport.park())-->waiting
waiting --(object.notify(),object.notifyAll(),lockSupport.unpark(thread))-->running
time_waiting 超时期待 示意以后线程超过一段时间主动返回running状态
running --(object.wait(long),thread.join(long),lockSupport.parkNanos(),lockSupport.parkUntil(),thread.sleep(long))-->time_waiting
time_waiting--(object.notify(),object.notifyAll(),lockSupport.unpark(thread))-->running
terminated 终止状态
running --(执行实现)-->terminated
上下文切换
一个线程的工夫片用完,就会回到就绪状态,切换成其余线程。
工作从保留到再加载就叫上下文切换。
耗费大量cpu工夫。