`

如何控制线程执行的先后顺序

    博客分类:
  • j2se
阅读更多

1.如果你有三个线程,分别为T1,T2,T3,如何让线程T2在线程T1之后执行,在线程T3之前执行。

答案是:使用线程的join方法,该方法的作用是“等待线程执行结束”,即join()方法后面的代码块都要等待现场执行结束后才能执行。事例代码如下:

package com.liuan.job;

public class Test {
	@SuppressWarnings("static-access")
	public static void main(String[] args) throws InterruptedException {
		Thread t1 = new Thread(new Runner());
		Thread t2 = new Thread(new Runner());
		Thread t3 = new Thread(new Runner());
		t1.start();
		t1.sleep(5000);
		t1.join();
	
		t2.start();
		t2.sleep(1000);
		t2.join();
		t3.start();
		t3.join();
	
	}
	
}

class Runner implements Runnable{

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+"");
		
	}
	
}

 执行结果是:

 

Thread-0
Thread-1
Thread-2

 

2.补充

线程的优先级无法保障线程的执行次序。只不过优先级高的线程获取 CPU 资源的概率大一点而已。

分享到:
评论

相关推荐

    线程池用法

    按先后顺序执行线程 public static void main(String[] args) { ExecutorService t = Executors.newSingleThreadExecutor(); for (int i = 0; i ; i++) { t.submit(new AA(i)); } System.out.println(...

    Java的线程安全内存模型.docx

    核心思想:在同一时刻,只能有一个线程执行。 通过加锁使线程更加安全,也使程序的执行效率更低。  衡量线程安全的3个要素:  o原子性:一个操作或者多个操作要么全部执行,要么都不执行 o可见性:多个线程访问...

    大厂真题之拼多多-Java高级

    1、并发编程三要素? (1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要 么就全部都不执行。... (3)有序性 有序性,即程序的执行顺序按照代码的先后顺序来执行。

    Java并发面试题整理(答案)

    有序性,即程序的执行顺序按照代码的先后顺序来执行。 2、实现可见性的方法有哪些? synchronized 或者 Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。 3、多...

    python并发编程之多进程、多线程、异步和协程详解

    最近学习python并发,于是对多进程、多线程、异步和协程做了个总结。 一、多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个...在并发情况下,指令执行的先后顺序由内核决

    trycatchfinaly

    3. 但是如果有 finally块的话,那么,finally 几乎是必定会执行的,但是这里有一个先后顺序的问题,应该是 finally 块和 打印异常堆栈将会在另外一个线程之中执行,所以 打印的顺序就很有意思了。 4. 如果在try或者...

    JS内部事件机制之单线程原理

    任务队列 主线程:正在执行的代码,会生成函数调用栈。 macro-task(宏任务,新名:task)包括:...同步任务,语句只按语句先后顺序执行,前面未执行完,不会执行后面语句。 异步任务,语句不在语句先后顺序上执行,执

    java7源码-multithreading-and-concurrent:多线程与并发编程

    在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的。 对同一份资源操作时,会存在资源抢夺的的问题,需要加入并发控制。 线程会带来额外的...

    EventBus五种ThreadMode

    ThreadMode 提供了5种mode, 我觉得在只用其中的MAIN和BACKGROUD就可以了 ...5. ThreadMode: MAIN_ORDERED 在主线程中处理事件, 事件总是放入队列中通过handle处理, 并且总是发布时间按着先后顺序执行事件的处理

    浅谈Python线程的同步互斥与死锁

    同步 : 同步是一种协作关系,为完成操作,多进程或者线程间形成一种协调,按照必要的步骤有序执行操作。两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务...

    Python—-多线程—-Thread

    进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫...线程的运行是没有先后顺序的 子线程全部结束,主线程才会结束 Python会自动为线程指定一个名字 import threading import time def test1(): for i in

    生产者和消费者问题程序

    ③每个消费者线程的各个消费需求之间存在先后顺序。例如上述测试用例文件包含一行信息“5 C 3 l 2 4”,可知这代表一个消费者线程,该线程请求消费1,2,4号生产者线程生产的产品。而这种消费是有严格顺序的,消费1...

    基于取指执行时序范畴的多核共享Cache干扰分析

    在多核结构中,获得并行应用线程的安全、精确的最坏情况执行时间(worst case ...实验结果表明,与当前现有的考虑执行周期和基于逻辑访问先后顺序的方法相比,基于时序方法下的WCET估值分别可以提高12%和7%的精确度.

    易语言-易语言真正的线程池简易实现

    任务队列采用易语言中的“数据结构支持库”中的“队列”,队列为:先进先出,这样保证是按照先后顺序来进行的,而且弹出后会自动在队列中删除,使用方便。在有新任务时,由主线程将任务信息压入队列,并且设置“内部...

    设置setTimeout延时为0ms的作用

    所以,通过设置任务在延迟0毫秒后执行,就能改变任务执行的先后顺序,延迟该任务发生,改变它所调用的函数的优先级,使之异步执行。  例: 1. 下面这段代码,是不会实时获取到输入框里面的内容的。

    易语言真正的线程池简易实现例子-易语言

    任务队列采用易语言中的“数据结构支持库”中的“队列”,队列为:先进先出,这样保证是按照先后顺序来进行的,而且弹出后会自动在队列中删除,使用方便。在有新任务时,由主线程将任务信息压入队列,并且设置“内部...

    多处理器编程的艺术答案

    不满足无饥饿,因为某个线程A执行完turn=A之后,等待busy = false的时候,别的线程可能无限次的turn=X-->busy==false-- >busy=true。 不满足无死锁。可能有 W(A)(turn=A)-->W(B)(turn=B)-->R(A)(busy=...

    javaSE代码实例

    11.5.2 多个catch语句的先后顺序 218 11.6 断言 219 11.6.1 什么是断言 219 11.6.2 如何启用/关闭断言 220 11.6.3 防止滥用断言 222 11.7 小结 222 第12章 封装类——鸿沟之上的桥梁 223 12.1 封装...

    java面试800题

    Q0032 Oracle的集合操作函数,如sum(),avg(),max(),min(),与select,where,grouby,having的先后顺序,使用方法 Oracle集合查询基本知识,只有进行分组的列,才可以取在集合查询SQL语句中取字段,先Group By,再Having...

    C#微软培训资料

    <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...

Global site tag (gtag.js) - Google Analytics