高级线程任务

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
public void run() {

// TODO Auto-generated method stub
String name = Thread.currentThread().getName();

int count = 0;

while (!Thread.interrupted()) {// 当前线程是否中断
System.out.println(name + ":" + count++);
}
}
};

Thread t1 = new Thread(r);
Thread t2 = new Thread(r);

t1.start();
t2.start();
/**


* while (true) { double d = Math.random(); if (d >= 0.4999 && d <= 0.50001) {
* break; } }
*/
t1.interrupt();// 线程中断
t2.interrupt();// 线程中断
}

 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()方法相较于忙循环更挺好,因为他们不会浪费处理器周期。

 

posted on 2019-09-05 19:30  不在是从前  阅读(66)  评论(0)    收藏  举报

导航