编写一个控制台应用程序启动3个线程分别在屏幕输出字母A B C 每个字母输出1万次3个线程全部执行完毕退出

求大神... 求大神 展开
 我来答
丶伦ap
推荐于2018-03-30 · TA获得超过3876个赞
知道小有建树答主
回答量:247
采纳率:100%
帮助的人:70.4万
展开全部

上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中所有标志位置为结束,主程序随之结束。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式