共计 918 个字符,预计需要花费 3 分钟才能阅读完成。
过程和线程
各过程是独立的,而各线程则不肯定,同一过程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的治理和爱护;而过程正相反。
为什么要用多线程
单核时代,为了进步 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 工夫。