线程详解

进程:一个程序打开就是一个进程

线程:进程中包含线程

创建线程的4中方式

1.创建thread类(只能单一继承)

2.实现Runable接口(实现run方法的时候没有返回值,不允许抛异常)

3.callable接口(实现run方法的时候有返回值,允许抛异常)

4.使用线程池(用线程池,每次可以从线程池中拿一个线程)

 

线程的生命周期详解

(1)新建

new一个thread类,调用star方法,进入线程的一个新建状态,主要是为线程类分配类存,创建成员变量

(2)进入就绪状态

就是你调了start方法会进入就绪,这个时候是给线程创建方法栈,创建程序执行器,准备进行执行,正在等待,就是就绪状态

(3)执行

什么时候执行,就是代码调度器,调度在你这个线程上,拿到cup的执行权限的时候 ,这个时候就可以进行执行了,让CPU进行运行,运行过程中呢

(4)阻塞

如果调用了sleep方法,或者调用阻塞式IO流了,或者调用了同步锁,或者等待通知,或者调用suspend方法把线程挂起了,当前线程进入阻塞状态

(5)重新就绪

sleep时间到了,IO流读到数据了,或者拿到同步锁了,或者收到其他的线程通知了,或者调用resive方法,重新就绪

(6)运行

程序的调度器调到你的CPU了,就可以再次运行了

(7)死亡

调用stop方法,或者出错error了,或者抛出错误了,run、call正常结束了

3.线程安全和线程不安全的区别

线程安全:在单线程下的结果是444 多线程的结果也是444 单线程和多线程下结果相同

线程不安全:单线程和多线程执行结果不一致

线程不安全的原因:

1.多个线程在操作共享的数据

2.操作共享的数据有多条

3.多个线程对共享的数据有些写的操作

用锁的方式更加的灵活,知道什么时候开始加锁,什么时候放开锁,放在锁要放在finally里面,保证不死锁,当前线程有异常,不会阻塞后面的线程。不然后面的线程就找不到对象了

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值