线程学习

上图是线程的状态转换示意图。之前感觉看文字描述的很简单理解,画了图就不记得了。

这里来理一下,其中 a=就绪   b= 阻塞    c=运行   

理解是这样的,一个线程被初始化之后就是就绪的状态,等待着cpu来调度它,当被调用之后就进入运行状态,

这个时候,如果是cpu主动分配的时间片段到了,还没执行完,那么由运行进入就绪状态,等待下次调用。

但是因为cpu会同时处理很多请求,而这些请求很可能共用一个资源,此时C运行的时候刚好要用某个资源被其他进程或者线程占用着,那么线程就由运行变为阻塞。 因为C要等待cpu把其他东西处理完。

在阻塞的状态下,如果等待的事情发生了,也就是造成阻塞的那个事情被处理完了,那么当前这个线程就由阻塞变为就绪状态,等待cpu 再次分配时间调用它。

理论部分说完,来说代码部分。

在java 中,线程类主要通过继承thread和实现runable接口来定义。不过都需要重载run 方法。 建议用实现runable的方法,因为thread 就是实现的runable 接口。线程整个过程分为new thread ->start thread->run thread 。

new thread对应初始化状态  start thread 对应调用   run thread 对应运行状态。

 

最后说到线程,需要说下锁。 java 可以将锁加在方法上面,也可以在某段代码中加。 有一个原则就是锁的范围越小越好 ,加锁的目的就是将锁进去的代码作为原子性操作,因为非原子操作都不是线程安全的,因此synchronized代码块应该是在开发过程中优先考虑使用的加锁方式。

代码部分https://www.cnblogs.com/wangyayun/p/6593446.html 这篇博客举得例子觉得很容易懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值