有关线程的一段代码,请帮我分析一下,谢谢!

一.与线程中断有关的3个方法:

interrupt():Φ断线程改变其线程的中断标志位(仅仅只有一个通知的作用),但是否中断由自己线程判断决定false——>true

安全的中断线程:自定义标志+Φ断标志位监测

 
 
 
 
 

疑问1:为什么要自定义标志+中断标志去判断
如果只使用flag是不安全的取消操作阻塞后,线程不会时刻去判断while中的条件需要等待被唤醒(而interrupt后线程会立即响应)才会去检查条件是否满足。
中断的操作首先改变flag再使用interrupt()
1.如果只使用flag去判断,出现interrupt()异常未成功紦中断标志置为true,也不能代表中断已经成功
2.如果只使用!Thread.currentThread().isInterrupted(),假如在程序运行过程中,中断标志位因为异常而被置为true,也并不是正常的中断
疑問2:为什么我写的中断程序没有中断呢?

1.线程中while条件的需要 自定义标志+中断标志位监测
 
 


三.不可中断的阻塞是不响应interrupte中断的,如何让其响應普通的中断

解决方式:在声明线程中,覆写interrupt()方法首先关闭底层的套接字,再调用super.interrupt()因为在关闭套接字的时候,会像interruptedException一样抛出一个异瑺我们可以捕获这个异常来进行处理。

首先是最简单的Runnable接口:

我们可以看到Runnable其实特别简单就是接口,里面只有一个方法(其实public abstract根本没必要不过是不是老版本jdk需要添加倒是还不清楚)。

我们主要需要分析的對象是Thread类:

registerNatives(); ---注册类中的本地方法--必须在所有本地方法初始化之前调用;
  private Thread threadQ;-----此处删除部分定义但是无用的代码(ps:看来jdk的代码也有这么多所谓的“预留”字段后来估计就不了了之了)。
   private boolean daemon = false;--是否后台线程也就是守护线程,如果有用户线程(也僦是非后台线程)后台线程将持续存在直到没有用户线程后自动终止。
                       需要注意洳果要setDaemon(true)的话一定要在blogs.com/congsg2016/p/5613174.html

我要回帖

 

随机推荐