高级线程任务
1. 中断线程
Void interrupt() : 中断调用次方法的Thread对象所关联的线程
Static Boolean interrupted() : 验证当前线程是否已经中断:
Boolean isInterrupted() : 验证线程是否已经中断?
总结
1. interrupted():测试 当前线程 是否已经是中断状态,执行后具有清除状态功能。
2. isInterrupted():测试线程 Thread 对象 是否已经是中断状态,但不清楚状态标志。
如还分不清楚,详见:https://blog.csdn.net/github_34889651/article/details/52474869
|
Runnable r = new Runnable() { @Override // TODO Auto-generated method stub int count = 0; while (!Thread.interrupted()) {// 当前线程是否中断 Thread t1 = new Thread(r); t1.start(); |
2.等待线程
Void join() 无线等待线程直至该线程死亡。
Void join(long millis) 等待millis毫秒数后死亡。
Void join(long millis, int nanos) 毫秒加纳秒后,死亡。
|
/** * Project Name:demo * File Name:MyThread03.java * Package Name:two * Date:2019年8月27日下午6:58:01 * Copyright (c) 2019, 364574851@qq.com All Rights Reserved. * */
package one;
import java.math.BigDecimal;
/** * ClassName:MyThread03 <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2019年8月27日 下午6:58:01 <br/> * * @author zhangxdp * @version * @since JDK 1.8 * @see */ public class MyThread10 {
public MyThread10() {
}
private static BigDecimal result;
public static void main(String[] args) { Runnable r = () -> { System.out.println("线程开始了呢"); result = computePi(50000); };
Thread t = new Thread(r);
t.start();
try { System.out.println("线程暂停了呢"); // t.join(); System.out.println("线程完事了呢"); } catch (Exception e) { // TODO: handle exception } System.out.println(result); }
private static BigDecimal computePi(int digits) { int tscale = digits + 5; return new BigDecimal(tscale); } } |
结果:
|
线程暂停了呢 线程开始了呢 线程完事了呢 null |
t.join() 代码去掉注释,结果如下: 说明主线程暂停了,等待线程T 执行完了再去执行打印输出结果。
|
线程暂停了呢 线程开始了呢 线程完事了呢 50005 |
2. 线程睡眠
Void sleep(long millis) 暂停millis毫秒数后,线程继续进行
Void sleep (long millis ,long nanos) 毫秒数和纳秒数合起来,后线程继续进行。
Sleep()方法相较于忙循环更挺好,因为他们不会浪费处理器周期。
浙公网安备 33010602011771号