首页 > 编程语言 > 详细

Java中线程的基本操作

时间:2020-11-03 23:27:25      阅读:46      评论:0      收藏:0      [点我收藏+]

Java中线程的基本操作??

一.新建线程??

? 1.只要使用new关键字创建一个线程对象,并且将它start()起来即可

技术分享图片

2.start()源码分析??

技术分享图片

? ①核心部分是start0这个本地方法(JNI方法)??

?技术分享图片

? 在开始执行这个线程时,JVM将会调用该线程的run方法,换言之,run方法是被JNI方法start0()调用的,可得出几个知识点

? --Thread被构造后的NEW状态,事实上threadStatus这个内部属性为0

? --不能两次启动Thread,否则就会出现IllegalThreadStateException异常

? --线程启动后将会被加入到一个ThreadGroup中

? --一个线程生命周期结束,也就是到了TERMINATED状态,再次调用start方法是不允许的,也就是说TERMINATED状态是没有办法回到RUNNABLE/RUNNING状态的

3.Thread run()源码??
技术分享图片

①线程的真正执行逻辑在run方法中,通常我们把run方法称为线程的执行单元,重写run()方法,用start()方法启动

? ②准确地讲,创建线程只有一种方式那就是构造Thread类,而实现线程的执行单元(run())则有两种方式,第一种是重写Thread的run方法第二种是实现Runnable接口的run方法,并且将Runnable实例用作构造Thread的参数

? 错误说法(不严谨):①构造一个Thread ②实现Runnable接口

? ③无论是Runnable的run方法,还是Thread类本身的run方法(事实上Thread类也实现了Runnable接口),都是想将线程的控制本身业务逻辑的运行分离开来,达到职责分明、功能单一的原则

? ④另外重写Thread的run方法与实现Runnable接口的run方法不同:那就是Thread类的run方法是不能共享的,线程A不能把B线程的run方法当作自己的执行单元,而Runnable接口则很容实现这一点,使用同一个Runnable的实例构造不同的Thread实例

二.终止线程??

? 1.被标注为废弃的stop()方法,过于暴力,强行把执行到一半的线程终止,可能会引起一些数据不一致的问题

? 2.终止线程,立刻释放了锁,破坏了对象一致性,强行终止,对象被写坏,另一个等待的线程直接读到不一致的对象

三.线程中断??

1.public void interrupt() //中断线程??

? ①interrupt() 是一个实例方法,它通知目标线程中断,也就是设置,中断标志位表示当前线程已经被中断了

? ②可被打断阻塞的方法

?技术分享图片

? ③阻塞被打断,会抛出InterruptedException异常,这个异常就像一个signal(信号)一样通知当前线程被打断了

2.public static boolean interrupted() //判断是否被中断??

? ininterrupted()也是实例方法,它判断当前线程是否有被中断(通过检查中断标志位)

3.public boolean isInterrupted() //判断是否被中断,并清除当前中断状态??

? ①isInterrupted()方法和interrupted方法都调用了同一个本地方法

技术分享图片

? ②ClearInterrupted主要用来控制是否擦除线程interrupt的中断标志位

? isInterrupted()方法中该参数为false,表示不想擦除

-------------摘自《Java高并发编程详解》、《实战Java高并发程序设计》

Java中线程的基本操作

原文:https://www.cnblogs.com/Seraphire-yili/p/13923107.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!