java 三个线程交替执行
2017-12-27 17:41
417 查看
package cn.itcast.gz; |
import java.util.concurrent.locks.Condition; |
import java.util.concurrent.locks.Lock; |
import java.util.concurrent.locks.ReentrantLock; |
/** |
* 第一个线程循环5次,接着第二个线程循环10次, |
* 接着第三个线程循环15次,然后又到第一个线程循环5次 |
* 如此往复执行50次 |
* |
*/ |
public class Interview3 { |
public static void main(String[] |
ThreadTest3 new ThreadTest3(); |
Thread new Thread(threadTest3); |
Thread new Thread(threadTest3); |
Thread new Thread(threadTest3); |
t1.start(); |
t2.start(); |
t3.start(); |
} |
} |
class ThreadTest3 implements Runnable |
{ |
private Lock new ReentrantLock(); |
private int j 0 ; |
private int k 1 ; |
Condition |
Condition |
Condition |
public void father() |
{ |
lock.lock(); |
try { |
while (j!= 0 ) |
con1.await(); |
for ( int i 1 ;i<= 5 ;i++) |
{ |
System.out.println( "Thread A..." +i); |
} |
j=(j+ 1 )% 3 ; |
con2.signal(); |
} catch (Exception |
e.printStackTrace(); |
} |
finally |
{ |
lock.unlock(); |
} |
} |
public void son() |
{ |
lock.lock(); |
try { |
while (j!= 1 ) |
con2.await(); |
for ( int i 1 ;i<= 10 ;i++) |
{ |
System.out.println( "Thread B..." +i); |
} |
j=(j+ 1 )% 3 ; |
con3.signal(); |
} catch (Exception |
e.printStackTrace(); |
} |
finally |
{ |
lock.unlock(); |
} |
} |
public void granson() |
{ |
lock.lock(); |
try { |
while (j!= 2 ) |
con3.await(); |
for ( int i 1 ;i<= 15 ;i++) |
{ |
System.out.println( "Thread C..." +i); |
} |
j=(j+ 1 )% 3 ; |
con1.signal(); |
} catch (Exception |
e.printStackTrace(); |
} |
finally |
{ |
lock.unlock(); |
} |
} |
@Override |
public void run() { |
for ( int i 0 ;i< 3 ;i++) |
{ |
if (k== 1 ) |
{ |
father(); |
k=(k+ 1 )% 3 ; |
} |
else if (k== 2 ) |
{ |
son(); |
k=(k+ 1 )% 3 ; |
} |
else |
{ |
granson(); |
k=(k+ 1 )% 3 ; |
} |
} |
/* father(); |
son(); |
granson();*/ |
} |
} |
相关文章推荐
- java 之 三个线程交替执行任务
- 关于java线程的经典面试题。主线程子线程交替执行n次
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java多线程问题,线程交替执行
- 三个Java线程(使用线程池)交替打印1到75个数的两种解法
- java两个线程交替执行
- 两个线程严格交替执行java实现
- Java多线程,线程交替执行
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java实现让n个线程严格交替执行
- java让2个线程交替执行
- java让2个线程交替执行,每个线程执行1秒
- java中使用ReentrantLock锁中的Condition实现三个线程之间通信,交替输出信息
- Java案例:两个线程交替执行
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
- 三个线程交替执行,c++实现
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- java 中的wait和notify以及synchronized的使用,实现两个线程交替执行
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去