通过join方法顺序执行多个线程
方法一:直接用多线程之间的通讯去解决
package com.toov5.test;
import javax.imageio.ImageTypeSpecifier;
class Res1{
char flag = 'A' ;
}
class A extends Thread{
Res1 res;
public A(Res1 res) {
this.res=res;
}
@Override
public void run() {
while (true) {
synchronized (res) {
if (res.flag == 'A') {
System.out.println("A");
res.flag='B';
res.notifyAll();
}else {
try {
res.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
class B extends Thread{
Res1 res;
public B(Res1 res) {
this.res=res;
}
@Override
public void run() {
while (true) {
synchronized (res) {
if (res.flag == 'B') {
System.out.println("B");
res.flag='C';
res.notifyAll();
}else {
try {
res.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
class C extends Thread{
Res1 res;
public C(Res1 res) {
this.res=res;
}
@Override
public void run() {
while (true) {
synchronized (res) {
if (res.flag == 'C') {
System.out.println("C");
res.flag='D';
}else {
try {
res.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public class Test9 {
public static void main(String[] args) {
Res1 res1 = new Res1();
A a = new A(res1);
B b = new B(res1);
C c = new C(res1);
a.start();
b.start();
c.start();
}
}
方法二:join()去执行
public class JoinThreadDemo02 {
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("A");
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
try {
t1.join();
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("B");
}
});
Thread t3 = new Thread(new Runnable() {
public void run() {
try {
t2.join();
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("C");
}
});
t1.start();
t2.start();
t3.start();
}
}
解读:三个线程在交替执行,被cpu去调度。 如果调度的是t3 那么执行的是 t2.join() 此时t2线程又是跑了 t1.join(),一次类推、
总之 三个线程去调度时候 都是不确定的 每次的调度都是套着环在里面 每种可能性都有了设计
我喜欢这样的代码
通过join方法顺序执行多个线程的更多相关文章
- ajax异步导致js方法顺序执行不了
js两个方法调用的顺序,有时候是这样的 f1(); f2(); 本来是先执行f1的,但是如果f1里面进行ajax异步 async:true,那么可能会先执行f2,如果想要顺序执行,那么就把异步设 ...
- Java中线程顺序执行
现有线程threadone.threadtwo和threadthree,想要的运行顺序为threadone->threadtwo->threadthree,应该如何处理?这里需要用到一个简 ...
- java多线程之守护线程以及Join方法
版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.守护线程概述及示例 守护线程就是为其它线程提供"守护"作用,说白了就是为其它线程服务的,比如GC线程. java程序中线程分 ...
- 线程相关的sleep()、yield()、wait()、join()方法介绍
1.Thread.sleep()与Thread.yield()都会暂缓当前线程执行,转为执行其他线程(忽略优先级),如果持有锁,则不会释放. 2.Thread.sleep()可以精确指定休眠的时间,而 ...
- 线程中的join方法
join方法的作用是同步线程. 1.不使用join方法:当设置多个线程时,在一般情况下(无守护线程,setDeamon=False),多个线程同时启动,主线程执行完,会等待其他子线程执行完,程序才会退 ...
- 线程中的join方法,与synchronized和wait()和notify()的关系
什么时候要用join()方法? 1,join方法是Thread类中的方法,主线程执行完start()方法,线程就进入就绪状态,虚拟机最终会执行run方法进入运行状态.此时.主线程跳出start方法往下 ...
- 线程join方法 小demo
1.第一个示例: package cn.threaddemo; public class T implements Runnable { public static int a = 0; @Overr ...
- Java中如何保证线程顺序执行
只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的.如果只是创建三个线程然后执行,最后的执行顺序是不可预期的.这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程 ...
- Qt 控制线程的顺序执行(使用QWaitCondition,并且线程类的run函数里记得加exec(),使得线程常驻)
背景项目中用到多线程,对线程的执行顺序有要求: A.一个线程先收数据 B.一个线程处理数据 C.一个线程再将处理后的数据发送出去 要求三个线程按照ABC的顺序循环执行. 思路子类化多线程方法 重写子类 ...
随机推荐
- LR测试文件上传
开启fiddler 录制,回放,把上传文件放入脚本根目录中.
- 母版页改变被嵌套的页面中的控件ID的解决方法
使用过模板页的朋友都会很纳闷,怎么页面的用js通过getElementById(“id”):找不到对象.查看了页面源代码才发现,原来控件的ID变了,这是母版页导致的.因为母版页怕母版页本身页面中的控件 ...
- linux磁盘清理
一.背景: 1.由于linux系统空间是由挂载磁盘得来的,但有时装系统时挂载/根目录空间不大,现仅清除用户下载的大文件 二.方法: 1.输入命令df -h显示当前磁盘挂载(包含剩余空间)情况这里写图片 ...
- Oracle DBA的学习(笔记)
1.软件任务分组:系统分析师.系统设计师.程序员.测试人员.开发dba.系统架构师.实施人员. 2.常用设计图:活动图.用例图.类图.序列图. 2010-9-15(dba学习) 1.1 Oracle产 ...
- 【转】虚拟 IO 服务器(VIOS)和 IBM i
Power 主机上的虚拟化应用,简单阐述虚拟 IO 服务器的功能,用途,优点,以及虚拟 IO 服务器在高级虚拟化技术的作用.举例说明虚拟 IO 服务器与 IBM i 分区直接互联特性. 引言 随着信息 ...
- Mysql常用优化方案
摘自:http://www.jb51.net/article/18934.htm 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也 ...
- 让phpstorm 支持 vue文件并且语法高亮
1 安装 vue.js 插件 很遗憾,我的win版本没有支持的插件 2 修改文件类型 vue本质上还是html文件,包含了css html js,用html类型文件打开就可以 给html 文件添加 * ...
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
用一个集合类对所有的Activity进行管理,实现随时控制Activity.用add(Activity activity)方法向List中添加Activity,用remove(Activity act ...
- 从SignalTap II中获取“最真实”的仿真测试向量(ZZ)
在实际工作中,经常会遇到这样的情况:在硬件调试中采用SignalTap II反复多次编译并最终捕获到问题的原因时,才会发现,原来这个问题是逻辑问题,是可以在仿真环境下发现并快速解决的.先前没 ...
- python调用html内的js方法
这方面资料不多,不懂html,不懂js,略懂python的我,稍微看了点html和js,好几天的摸索,终于测试成功了. PYQT+HTML利用PYQT的webview调用JS内方法 1.python调 ...