Thread.join()的使用
来源:互联网 发布:1015357422的喜欢乐乎 编辑:程序博客网 时间:2024/06/06 20:19
用法
如果一个线程t1在另外一个线程t2上调用join方法,那么t1将被挂起,直到t2结束,t1才会执行任务。
一个简单例子
public class TestJoin implements Runnable { public static void main(String[] args) throws InterruptedException { Thread t = new Thread(new TestJoin()); long start = System.currentTimeMillis(); t.start(); t.join(1000); //等待线程t执行1000毫秒在执行main线程 long end = System.currentTimeMillis(); long result = end - start; System.out.println("cost time: " + result); System.out.println("Main finished"); } @Override public void run() { for (int i = 1; i <= 5; i++) { try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("睡眠: " + i); } System.out.println("TestJoin finished"); }}
执行结果:
cost time: 1001Main finished睡眠: 1睡眠: 2睡眠: 3睡眠: 4睡眠: 5TestJoin finished
主线程会让线程t执行1秒,之后main线程和t线程进行抢占式调用
join源码
public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } } public final void join() throws InterruptedException { join(0); }
查看源码发现其底层的实现为wait。上面的例子中当main线程调用t.join(),main线程将等待,t线程将获得1秒的执行时间
阅读全文
0 0
- Thread.join()的使用
- Thread.join()的使用
- Thread.join()的使用
- Thread的join方法使用
- 使用Thread的join()方法
- Thread.join()方法的使用
- Thread.sleep 和Object.join的使用
- Thread类中的join方法的使用
- C# thread的join方法使用解析
- Thread类的join方法使用
- Thread中join方法的使用分析
- thread.join()的用法
- Thread Join()的用法
- thread join 的尝试
- Thread类的join()
- Thread的join()
- Thread的join()方法
- Thread 的join
- Java对象及其引用
- 智能零售时代将至 人工智能引领未来
- 接口
- 《太阳的后裔》火了,连它都创造了奇迹
- 霍金让你们警惕的AI军备竞赛,巨头们已经玩开了
- Thread.join()的使用
- 前置摄像头也要谈画质 OPPO R9前置摄像头拍照测试
- Gym
- qt常用快捷键总结
- 接口2
- 企业微信上线,给了钉钉一个漂亮的回击
- 腾讯手机管家获国际权威机构AV-TEST大满贯 用户活跃度第一
- 可能是全球最快手机 vivo Xplay5日系小清新图赏
- IDC:中国"互联网+"产业创新企业100强名单,智城云榜上有名