join
都是写在 main
里面的,所以都是 main
线程等待 t1
和 t2
,t1
和 t2
之间没有等待关系t2
中写 t1.join
,则 t2
需要等待 t1
线程先执行完想在某个线程中,获取到自身的 Thread 对象的引用,就可以通过 currentThread 来获取到
public class Demo7 {
public static void main(String[] args) throws InterruptedException {
Thread mainThread = Thread.currentThread();
Thread t = new Thread(()->{
//需要在 t 中调用主线程.join
System.out.println("t 线程开始等待");
try {
mainThread.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("t 线程结束");
});
t.start();
Thread.sleep(1000);
System.out.println("main 线程结束");
}
}
//打印顺序:
//t 线程开始等待
//main 线程结束
//t 线程结束
任何线程中,都可以通过这样的操作,拿到线程的引用
任何需要的时候,都可以通过这个方法来获取到
Thread.sleep
可以让调用的线程阻塞等待,是有一定时间的sleep
,就会使这个线程不参与 CPU
调度,从而把 CPU
资源让出来给别人使用sleep
这种操作,称为“放权”,放弃使用 CPU
的权利CPU
占用率过高,就可以通过 sleep
来进行放权改善CPU
就是给程序用的,但是有的程序可能包含很多线程,这些线程之间是有“轻重缓急”的sleep
来更明显的影响到这里的 CPU
占用原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。