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

求大神

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

温馨提示:内容为网友见解,仅供参考
无其他回答

想深入学习C#语言,有没有达人知道C#的好的资料呢?
27. 创建一个带有3个子线程的程序,第一个线程序启动10毫秒后,第二个线程再启动,然后再等10毫秒后第三个线程启动,每一个线程从1~1000循环输出线程的名称和计数,当3个线程结束时要输出各自的结束信息,然后,主线程结束。28. 制作一个程序模拟图书馆中的书籍借阅操作,有两个人几乎同时查阅某一本书是否还有(用两...

我见到的电脑一台主机安装3套程序,各不干扰,请教是怎么做到的_百度知 ...
1、 双击桌面上的“BETWIN控制台”的图标,进入BETWIN控制台 2、 未注册的前系统弹出对话框,提示用户的注册,在测试阶段,不需注册,选择“以后注册”继续。 3、 在BETWIN控制中心界面上选择“工作站的配置”,进入配置界面 4、 选择“添加工作站”,弹出工作站的命名对话框,用户为要添加的工作站起一个名字 5、 确定...

ipo程序编写的方法是什么?
基本的程序编写方法---IPO(Input, Process, Output)方法。1、 输入:控制台输入、随机数据输入、内部变量输入、文件输入、交互界面输入、网络输入 2、处理:程序中实现处理功能的方法称为“算法”,算法是程序的灵魂。3、输出:(1)控制台输出:以计算机屏幕为输出目标,通过程序运行环境中的命令行打印...

局域网内命令大全
copy c:\/srv.exe \/\/ip\/***$ 复制本地c:\/srv.exe到对方的***下cppy 1st.jpg\/b+2st.txt\/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:\/b指二进制文件,\/a指ASCLL格式文件copy \/\/ip\/***$\/svv.exe c:\/ 或:copy\/\/ip\/***$\/*.* 复制...

开机出现桌面时出现这样一个对话框是什么意思
1. 当 MicrosoftVisualBasic 应用程序显示一个对话框, 然后终止, .EXE 文件的名称都不会出现在服务 Applet 对话框, 但是后面灰色矩形 VisualBasic 应用程序对话框保留用户界面上。 2. 从服务, MicrosoftVisualBasic 应用程序启动时 .EXE 文件名称简要出现在服务 Applet 对话框但 VisualBasic 应用程序启动似乎不。 3...

cmd中全部命令```
mmc.exe 控制台 mnmsrvc.exe 远程桌面共享 mobsync.exe 同步目录管理器 mountvol.exe 创建、删除或列出卷的装入点。 mplay32.exe Media Player 媒体播放器 mpnotify.exe 通知应用程序 mqbkup.exe 信息队列备份和恢复工具 mqmig.exe MSMQ Migration Utility 信息队列迁移工具 mrinfo.exe 使用SNMP多点传送路由 mscdex...

电脑一开机很卡怎么办电脑一开机就卡怎么回事
这种情况应该是随系统启动的程序太多,造成系统加载时间过长所引起的。可用如下办法:x0dx0a①、先禁用一部分不必要的开机启动项:关机重启,按“F8键”,选“安全模式”进入系统,点“开始”--“运行”(或用组合键“Windows键+R键”)调出运行栏;x0dx0a②在运行栏输入“msconfig”回车(或确定),调出“系统配置”...

帮忙指教一下DOS的使用?
copy 路径\\文件名1 路径\\文件名2 \/y 复制文件1到指定的目录为文件2,用参数\/y就同时取消确认你要改写一份现存目录文件 copy c:\\srv.exe \\\\ip\\admin$ 复制本地c:\\srv.exe到对方的admin下 cppy 1st.jpg\/b+2st.txt\/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt...

DOS 中的符号是什么意思 比如% $都是做什么的?急求答案谢谢高手_百度...
tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口 exit 退出cmd.exe程序或目前,用参数\/B则是退出当前批处理脚本而不是cmd.exe path 路径\\可执行文件的文件名 为可执行文件设置一个路径。 cmd 启动一个win2K命令解释窗口。参数:\/eff、\/en 关闭、开启命令扩展;更...

谁能告诉我一些关于使用电脑的小知识,越全面越好,拜托了!
二 当你面对一大堆窗口,却要一个一个把它们关掉时。是不是很烦啊。只要你按shift键在单击关闭按扭,所以的窗口就会全部关掉。 三 在输入大小写字母时,按shift键,就可以改变其大小写! 四 当安装了某个新软件,有时要从新启动计算机才有用,只要先按shift键,就可以跳过计算机的自检节省了大量的时间! 五 选择...

相似回答