【大数据开发】Java语言基础——线程的生命周期、线程同步

一、线程的生命周期

新建:使用new关键字创建一个线程以后,该线程就处于新建状态
就绪:线程对象调用了start()方法后,线程处于就绪状态,处于这个状态的线程没有开始运行,只是表示可以运行,什么时候可以运行取决于JVM里的线程调度器的调度。就绪状态相当于“等待执行”,并没有真正进入运行状态(如果希望调用子线程的start()方法后希望子线程立刻执行,则程序可以使用Thread.sleep())方法
只能对处于新建状态的线程调用start()方法,否则会发生IllegalThreadStateException异常
运行:如果处于就绪状态的线程获得CPU,开始执行run()方法线程执行体,就处于运行状态
阻塞:被阻塞的线程会在何时的时候重新进入就绪状态,而不是运行状态,也就是说,被阻塞的线程的阻塞接触后,必须重新等待线程调度器再次调度它(阻塞的线程放弃了CPU)
死亡:(1)run()或call()方法执行完,线程正常结束;(2)线程抛出为捕获的Exception或者error;(3)直接调用stop()方法结束
当主线程结束时,其他线程不会随之结束,一旦子线程启动起来,它就拥有和主线程相同的地外,它不会受到主线程的影响

在这里插入图片描述

join()的线程只有主线程会让出线程等待该线程执行完
后台线程的特征:如果所有的前台线程都死亡,那么后台线程会自动死亡。当整个虚拟机中只剩下后台线程时,程序就没有继续运行的必要了,所以虚拟机也就退出了

二、线程同步

synchronized可以修饰方法和代码块。对于syncronized修饰的实例方法(非static方法),无须显式指定同步监视器,同步方法的同步监视器是this,也就是调用该方法的对象。
同步代码块、同步方法中出现了未处理的Error和Exception会倒是当前线程放弃监视器
wait()会放弃同步监视器
sleep()、yield()会暂停当前线程执行,但是不会放弃同步监视器
两个线程相互等待对方释放同步监视器时就会发生死锁,一旦发生死锁,整个程序不会发生任何异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值