java 多线程控制线程执行顺序
2016-08-09 15:15
489 查看
之前遇到过这个问题,直接上代码记录下:
public class RunableTest implements Runnable {
volatile int target="A".codePointAt(0);
static int minOrder="A".codePointAt(0);
static int maxOrder="C".codePointAt(0);
@Override
public void run() {
synchronized (this){
int order=Thread.currentThread().getName().codePointAt(0);
for (int i=0;i<10;i++){
while (target!=order){
try{
wait();
}catch (Exception ex){
}
}
System.out.println(Thread.currentThread().getName());
target=order+1;
if(target>maxOrder){
target=minOrder;
}
notifyAll();
}
}
}
}
执行结果
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
public class RunableTest implements Runnable {
volatile int target="A".codePointAt(0);
static int minOrder="A".codePointAt(0);
static int maxOrder="C".codePointAt(0);
@Override
public void run() {
synchronized (this){
int order=Thread.currentThread().getName().codePointAt(0);
for (int i=0;i<10;i++){
while (target!=order){
try{
wait();
}catch (Exception ex){
}
}
System.out.println(Thread.currentThread().getName());
target=order+1;
if(target>maxOrder){
target=minOrder;
}
notifyAll();
}
}
}
}
public class TestMain { public static void main(String[] args){ Runnable runnable=new RunableTest(); Thread threadA=new Thread(runnable,"A"); Thread threadB=new Thread(runnable,"B"); Thread threadC=new Thread(runnable,"C"); threadA.start(); threadB.start(); threadC.start(); } }
执行结果
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
A
B
C
相关文章推荐
- Java多线程系列四——控制线程执行顺序
- java中线程执行顺序控制
- Java控制多线程执行顺序
- Javaの线程之多线程执行顺序
- java控制多线程执行顺序
- Java--线程的先后执行顺序控制
- java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用
- java 中线程执行顺序控制
- Java 多线程 (PART VII) 使用join()方法保证线程的执行顺序
- Java 多线程 (PART XIX) 使用Condition实现线程的顺序执行
- Javaの线程之多线程执行顺序
- java 中线程执行顺序控制
- Java中使用ReentrantLock控制线程执行顺序
- java控制线程的执行顺序
- Java控制3个线程顺序执行2次
- java控制多线程执行顺序
- java中线程执行顺序控制
- java多线程-使用ReentrantLock实现线程的顺序执行
- java中控制线程间执行顺序的方法
- java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用