1个回答
展开全部
上java代码
import java.util.HashMap;
import java.util.Map;
public class Test2 {
Map<String, String> map = new HashMap<String, String>();
public Map<String, String> getMap() {
return map;
}
public Test2() {
map.put("A", "START");
map.put("B", "START");
map.put("C", "START");
}
public static void main(String args[]) {
Test2 a = new Test2();
a.exec();
System.out.println("三个线程启动");
while (true) {
Map<String, String> map = a.getMap();
if ("END".equals(map.get("A")) && "END".equals(map.get("B"))
&& "END".equals(map.get("C"))) {
break;
}
}
System.out.println("三个线程运行结束");
}
public void exec() {
try {
threadStart();
} catch (Exception e) {
}
}
public void threadStart() throws Exception {
Thread t1 = new Thread(new Runnable() {
public void run() {
disp("线程一");
map.put("A", "END");
}
});
t1.start();
Thread t2 = new Thread(new Runnable() {
public void run() {
disp("线程二");
map.put("B", "END");
}
});
t2.start();
Thread t3 = new Thread(new Runnable() {
public void run() {
disp("线程三");
map.put("C", "END");
}
});
t3.start();
}
public void disp(String tName) {
for (int i = 0; i < 10000; i++) {
if (i % 3 == 0)
System.out.println(tName + "---A");
if (i % 3 == 1)
System.out.println(tName + "---B");
if (i % 3 == 2)
System.out.println(tName + "---C");
}
}
}
解释,map为三个线程公用缓存,当三个线程并行各自结束的时候,将结束标志写入map中。
主程序进行无限循环,判断缓存中三个线程是否执行完毕,(注:无限循环中应加入Thread.sleep函数),当map中所有标志位置为结束,主程序随之结束。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询