186day(线程和中断线程)

陈国佳总结《2018年4月14日》【连续186天】

标题:线程和中断线程;

内容:
1.

下面是在一个单独的线程中执行一个任务的简单过程:
1 ) 将任务代码移到实现了Runnable 接口的类的run 方法中。这个接口非常简单, 只有
一个方法:
public interface Runnable
{
void runO;
}
由于Runnable 是一个函数式接口,可以用lambda 表达式建立一个实例:
Runnable r = 0 -> { task code };
2 ) 由Runnable 创建一个Thread 对象:
Thread t = new Thread(r);
3 ) 启动线程:
t.start();


•ThreadCRunnable target )
构造一个新线程, 用于调用给定目标的nm() 方法。
• void start( )
启动这个线程, 将引发调用mn() 方法。这个方法将立即返回, 并且新线程将并发运行。
參void run( )
调用关联Runnable 的run 方法。


当对一个线程调用interrupt 方法时,线程的中断状态将被置位。这是每一个线程都具有
的boolean 标志。每个线程都应该不时地检査这个标志, 以判断线程是否被中断。
要想弄清中断状态是否被置位, 首先调用静态的Thread.currentThread 方法获得当前线
程, 然后调用islnterrupted 方法:
while (!Thread.currentThread().islnterrupted() && more work to do)
{
do more work
}


•在catch 子句中调用Thread.currentThread().interrupt() 来设置中断状态。于是,调用者
可以对其进行检测。
void mySubTaskO
{
try { sleep(delay); }
catch (InterruptedException e) { Thread.currentThreadO -interruptO; }
•或者, 更好的选择是, 用throws InterruptedException 标记你的方法, 不采用try 语句
块捕获异常。于是, 调用者(或者, 最终的run 方法)可以捕获这一异常。
void mySubTaskO throws InterruptedException

{

sleep(delay) ;
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页