通过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的顺序循环执行. 思路子类化多线程方法 重写子类 ...
随机推荐
- POJ 1848 Tree
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3506 Accepted: 1204 Description ...
- iphone断点下载,断点续传
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650469 - (void)loadView { NSURLConnection ...
- Python数据驱动ddt
import ddtimport unittest """ddt模块包含了一个类的装饰器ddt和两个方法的装饰器: data:包含多个你想要传给测试用例的参数: file ...
- n++ ++n
n = 100 + m++ n = 100 +m; ++m n = 100 + ++m; ++m; n = 100 +m ;
- 转 谈谈JS里的{ }大括号和[ ]中括号的用法,理解后就可以看懂JSON结构了。
一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...
- Java 注解入门
1.什么是注解 注解的语法: @注解名称; 注解的作用: 用来替代 xml 配置文件; 在 Servlet 3.0 中就可以使用注解来代替配置文件; 注解是由框架来读取使用的; 所有的注解都是 Ann ...
- 谷歌浏览器input中的text 和 button 水平对齐的问题
方法一 text 的vertical-align :top; 方法二 button的vertical-align: middle;
- 用户(user)和用户组(group)相关的配置文件、命令或目录;
1.与用户(user)和用户组(group)相关的配置文件: 1)与用户(user)相关的配置文件:/etc/passwd 注:用户(user)的配置文件:/etc/shadow 注:用户(user) ...
- c语言复制文件程序
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 1024*1024* ...
- Android学习笔记之AndroidManifest.xml文件解析(详解)
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...