指定线程执行的顺序---join()
线程T1,T2,T3分别启动,如何让其执行顺序变为T3>T2>T1:
线程1:
package test6;
public class Thread1 extends Thread{
private Thread thread2;
public Thread1(Thread thread2){
this.thread2=thread2;
}
@Override
public void run(){
try {
thread2.join();
System.out.println("线程1在执行");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
线程2:
package test6;
public class Thread2 extends Thread{
private Thread thread3;
public Thread2(Thread thread3){
this.thread3=thread3;
}
@Override
public void run(){
try {
thread3.join();
System.out.println("线程2在执行");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
线程3:
package test6;
public class Thread3 extends Thread{
@Override
public void run(){
try {
System.out.println("线程3在执行。。。");
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行:
package test6;
public class Run {
public static void main(String[] args) {
Thread3 t3=new Thread3();
Thread2 t2=new Thread2(t3);
Thread1 t1=new Thread1(t2);
t1.start();
t2.start();
t3.start();
}
}
如图:启动顺序为t1,t2,t3.但是使用join后,执行顺序为t3,t2,t1
join的作用:使当前线程等正在执行的线程执行完。join内部调用的是wait方法没,所以释放锁。sleep不释放锁。
指定线程执行的顺序---join()的更多相关文章
- Qt实现指定线程执行回调
说明 同线程时,直接调用回调(block参数没意义) 创建invoker所在的线程,需要有Qt的消息循环(比如UI线程) 直接上代码 typedef std::function<void()&g ...
- 现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join
public class TestJoin { public static void main(String[] args) { Thread t1 = new Thread(new T1(), &q ...
- 【Java多线程系列四】控制线程执行顺序
假设有线程1/线程2/线程3,线程3必须在线程1/线程2执行完成之后开始执行,有两种方式可实现 Thread类的join方法:使宿主线程阻塞指定时间或者直到寄生线程执行完毕 CountDownLatc ...
- 等待某(N)个线程执行完再执行某个线程的几种方法(Thread.join(),CountDownLatch,CyclicBarrier,Semaphore)
1.main线程中先调用threadA.join() ,再调用threadB.join()实现A->B->main线程的执行顺序 调用threadA.join()时,main线程会挂起,等 ...
- Java多线程系列四——控制线程执行顺序
假设有线程1/线程2/线程3,线程3必须在线程1/线程2执行完成之后开始执行,有两种方式可实现 Thread类的join方法:使宿主线程阻塞指定时间或者直到寄生线程执行完毕 CountDownLatc ...
- java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)
多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行. 在我不知道CyclicBarrier之前,最容易想到的就是放置一个公用的 ...
- Junit指定测试执行顺序
原文链接: Test execution order原文日期: 2012年12月06日翻译日期: 2014年7月2日翻译人员: 铁锚说明: Junit4.11版本及以后才支持,建议升级到最新版本.按照 ...
- 【!Important】如何保证线程执行的先后顺序
1.假设有三个线程,分别为T1.T2.T3,如果让线程T2在线程T1之后执行,在线程T3之前执行. 使用线程的join方法,该方法的作用是“等待线程执行结束”,即join()方法后面的代码块都要等待现 ...
- promise实现图片按照指定的加载顺序执行
promise实现图片按照指定的加载顺序执行,先加载第二张,再加载第一张,最后加载第三张 <!DOCTYPE html> <html lang="en"> ...
随机推荐
- mysql查询结果输出到文件
mysql查询结果导出/输出/写入到文件 方法一: 直接执行命令: mysql> select count(1) from table into outfile '/tmp/test.xls' ...
- 关于extra加强延迟加载
一对多和多对多关联的查询策略 lazy属性的另一个属性extra 加强延迟加载 表明采用增强延迟加载策略:在<set>元素配置lazy属性为"extra".增强延迟加载 ...
- MVC5 + EF6 入门完整教程二:从前端的UI开始
从前端的UI开始 MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端UI的部分. ASP.NET MVC抛弃了WebForm的一些特有的习惯,例如服务器端控件,Vie ...
- web项目的日志打印位置设置
1, 若在项目中放logback.groovy文件(如: src/test/resource下),则日志会打印到控制台上. logback.groovy 内容如下: // // Built on Fr ...
- 谈谈UIView的几个layout方法
谈谈UIView的几个layout方法-layoutSubviews.layoutIfNeeded.setNeedsLayout... 最近在学习swift做动画,用到constraint的动画, ...
- 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...
- realestate.cei.gov.cn
using AnfleCrawler.Common; using System; using System.Collections.Concurrent; using System.Collectio ...
- 5、Linux下面桌面的安装
搭建本地yum仓库的方法 http://www.cnblogs.com/lql123/p/5952788.html 1.yum grouplist (列出yum仓库里的软件组列表) .y ...
- Linux type命令
用途说明 type命令用来显示指定命令的类型.一个命令的类型可以是如下几种: alias 别名 keyword 关键字,Shell保留字 function 函数,Shell函数 builtin 内建命 ...
- codeforces 711D Directed Roads(DFS)
题目链接:http://codeforces.com/problemset/problem/711/D 思路:由于每个点出度都为1,所以没有复杂的环中带环.DFS遍历,若为环则有2^k-2种,若为链则 ...