线程并行执行转为串行的法宝 join()

如果没有经过特殊处理,线程和线程之间是并行运行的,如何让它们串行执行呢?

(1)一种是使用无参的join(),等到另一个线程执行完毕再继续运行;
(2)一种是使用带参的join(long millis) ,等待一定的时间后,无论另一个线程是否执行完毕,都继续执行。

public class Thread1 extends Thread {
@Override
public void run() {
System.out.println("线程Thread1开始执行");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程Thread1执行完毕");
}
}

public class Thread2 extends Thread {
private Thread1 thread1;
public Thread2(Thread1 thread1) {
this.thread1 = thread1;
}

@Override
public void run() {
try {
// 时间超过了1000ms,则放弃等待,继续执行
thread1.join(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程Thread2开始执行");
System.out.println("线程Thread2执行完毕");
}

public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2(t1);
t1.start();
t2.start();
}
}

原文地址:http://blog.51cto.com/13855604/2171806

时间: 2024-11-08 13:14:02

线程并行执行转为串行的法宝 join()的相关文章

并行执行、串行执行和并发执行

并发执行是多道程序系统中多个程序(逻辑上互相独立)或者一个程序中的多个程序段在执行的过程当中,时间互相重叠,一个程序执行没结束,另一个已经开始. 并行执行是指一组程序按照独立的,不同步的速度执行,时间上不重叠: 串行就是指令一个一个的执行.并行是指令同时并行执行. 总结: 并发是指多个线程轮流执行(单核CPU): 并行是指多个线程同时执行(多核CPU),微观上是同时的: 串行是指一个一个的执行,处理完一个才能处理下一个,不轮换: 原文地址:https://www.cnblogs.com/feix

oracle中并行执行不一定比串行执行快

并行执行与串行执行相比,能否缩短执行时间,取决于如下几个方面:1.待执行的目标SQL是否适合并行执行,有些SQL是不太适合并行执行的,比如走索引的嵌套循环连接.2.数据库服务器上的硬件资源(如CPU.内存.I/O等)是否还有富余.3.并行执行时,是否最大化地利用了数据库服务器上的硬件资源(但同时又不能使数据库服务器上的硬件资源消耗殆尽).4.待执行的目标SQL的并行执行计划是否为当前情形下的最优执行计划. 原文地址:https://www.cnblogs.com/qinjf/p/8414654.

【iOS面试系列-2】多线程中同步、异步和串行、并行之间的逻辑关系(必考,必须掌握)

一.同步.异步和串行.并行 任务串行执行就是每次只有一个任务被执行,任务并发执行就是在同一时间可以有多个任务被执行. 一个同步函数只在完成了它预定的任务后才返回.一个异步函数,刚好相反,会立即返回,预定的任务会完成但不会等它完成.因此,一个异步函数不会阻塞当前线程去执行下一个函数. (来源:http://www.cocoachina.com/industry/20140428/8248.html) 队列分为串行和并行 任务的执行分为同步和异步 -------  队列只是负责任务的调度,而不负责任

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结 在GCD函数中, 我们常常碰到同步,异步,串行队列,并发队列,全局队列,主队列等概念,而这些概念又常常组合在一起, 十分头疼, 这篇文章就来梳理一下这些烦人的概念. 不想看长篇大论的, 直接看文章末尾的表格即可! 在此之前, GCD中还涉及到两个十分重要的概念, 就是任务和队列 任务(Task): 你需要执行的操作 队列(Queue): 存放任务的容器 GCD中两个重要的函数, 一个同步执行, 一个异步执行 dispatch_asyn

iOS-线程之GCD方式---之同步异步和串行队列并行队列之间的关系

GCD方式是Apple官方推荐实现多线程的方式 但在这之前必须理清楚同步,异步,串行队列,并行队列之间的概念. 同步:即当前的执行程序块不会创建一个新的线程,只能在当前线程中执行. 异步:会在当前的线程之外创建一个新的线程,并在新的线程中执行代码块. 首先声明一点,队列是用来存放即将执行的线程体的. 串行队列:串行队列中的线程满足FIFO(First In First Out),并且只有在先出的线程执行完,后续的线程才能出队列执行.(很可能造成APP的假死状态) 并行队列:并行队列也满足FIFO

GCD编程-串行队列与并发队列

接着上面的GCD封装,以下进行列子验证 1.导入GCD.h 2.创一个串行队列: - (void)serailQueue{ //创建出队列 GCDQueue *queue =  [[GCDQueue alloc]initSerial]; //运行队列中的线程 [queue execute:^{ NSLog(@"1"); }]; [queue execute:^{ NSLog(@"2"); }]; [queue execute:^{ NSLog(@"3&qu

iOS开发之GCD 多线程 1.串行队列 2.并行队列 3.分组 4.信号量 详细讲解

GCD多线程下,实现线程同步的方式有如下几种: 1.串行队列 2.并行队列 3.分组 4.信号量 实例: 去网上获取一张图片并展示在视图上. 实现这个需求,可以拆分成两个任务,一个是去网上获取图片,一个是展示在视图上. 这两个任务是有关联的,所以需要同步处理. 下面看这几种方式如何实现. 一. 1.串行队列 1.1[GCD相关:] (1)GCD下的dispatch_queue队列都是FIFO队列,都会按照提交到队列的顺序执行. 只是根据队列的性质,分为<1>串行队列:用户队列.主线程队列 &l

背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台下载任务(任务分组,并行或串行执行,组完成后通知) 示例演示后台下载任务的分组,以及如何设置组内任务是并行执行还是串行执行,以及组任务全部完成后如何 toast 或 tile 通知)BackgroundTask/TransferModel.cs /* * 扩展了 DownloadOperation 和 UploadOperation,用于 MVVM 绑定数据 */ using System; using S

IOS GCD(线程的 串行、并发 基本使用)

// 凡是函数名种带有create\copy\new\retain等字眼, 都需要在不需要使用这个数据的时候进行release // GCD的数据类型在ARC环境下不需要再做release // CF(Core Foundation)的数据类型在ARC环境下还是需要再做release @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorInBackgrou