两种方案:
1>利用Thread.join()方法,使C进程等待AB进程完成后执行
2>利用CountdownLatch定义一个计数器,在AB进程里用CountdownLatch. countDown()方法使计数器减少,在等待进程C中使用CountDownLatch.await()方法等待,直到计数器变为0,才开始执行
1. 思路:
a) 建立A B C三个线程,空跑模拟线程运行。
b) 在父进程中通过start()启动各子线程。
c) 利用上述两种方案完成任务。
2. 代码:
TestThread.java
public class TestThread {
public static void main(String[] args){
Thread A=new Thread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<18){
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
i++;
}
System.out.println("A OK");
}
});
Thread B=new Thread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<10){
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
i++;
}
System.out.println("B OK");
}
});
Thread C=new Thread(new Runnable() {
@Override
public void run() {
try {
A.join();
B.join();
}
catch (Exception e) {
e.printStackTrace();
}
int i=0;
while(i<6){
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
i++;
}
System.out.println("C OK");
}
});
A.start();
B.start();
C.start();
}
}
TestThread2.java
import java.util.concurrent.CountDownLatch;
public class TestThread2 {
public static void main(String[] args){
CountDownLatch count=new CountDownLatch(2);
new Thread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<18){
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
i++;
}
System.out.println("A OK");
count.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<10){
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
i++;
}
System.out.println("B OK");
count.countDown();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
count.await();
}
catch (Exception e) {
e.printStackTrace();
}
int i=0;
while(i<6){
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
i++;
}
System.out.println("C OK");
}
}).start();
}
}
转载于:https://blog.51cto.com/13958494/2286015