线程的理解

         现成从创建到最终的消亡,要经理若干个状态,一帮来说,现成包括以下几种状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。

         当需要新奇一个现成来执行某个子任务时,就创建了一个线程。但是现成创建之后,不会立即进入就绪状态,因为现成的运行需要一些条件(比如内存资源,java栈,本地方法栈都是现成私有的,随意需要为现成分配一定的内存空间),只有现成银杏需要的所有条件满足了,才进入就绪状态。

         当现成进入就绪状态后,不代表like就能获取cpu执行时间,也许此时cpu正在执行其他的事情,因此它要等待,当得到cpu执行时间之后,线程便真正进入运行状态。

        现成在运行状态过程中,可能有多个原因导致当前现成不继续运行下去,比如用户主动让现成睡眠(睡眠一定时间之后在重新执行),用户主动让现成等待,或者被同步块给阻塞,此时就对应着多个状态:time waiting(睡眠或等待一定的事件)、waiting(等待被唤醒)、blocked(阻塞)。<blocked、waiting、time waiting可以理解成阻塞状态>


上下文切换:

     对于单核CPU来说(对于多核cpu,此处就理解为一个核),cpu在一个时刻只能运行一个现成,挡在运行一个现成的过程中转去运行另一个现成,这个叫做现成上下文切换(对于进程也是类似)。

    犹豫可能当前现成的任务并没有执行完毕,所以切换时需要保存线程的运行状态,以便下次重新切换回来时能够继续切换之前的状态运行。

    说简单点的:对于线程的上下文切换实际上就是 存储和回复cpu状态的过程,它使得线程执行能够从中断点回复执行。

虽然多线程可以使得任务执行的效率得到提升,但是由于在线程切换时同样会带来一定的开销代价,并且多个线程会导致系统资源占用的增加,所以在进行多线程编程时要注意这些因素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值