关于java:12-多线程

过程和线程
各过程是独立的,而各线程则不肯定,同一过程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的治理和爱护;而过程正相反。

为什么要用多线程
单核时代,为了进步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工夫。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理