这段循环按顺序打印 ABCD...的多线程程序的输出结果为什么不对?
1这段循环按顺序打印 ABCD...的多线程程序的输出结果为什么不对?
2我中文注释中的理解是否正确?
import java.util.HashMap;
public class Main{
static char globalFlag = 'A';
static HashMap<Character,Object> m = new HashMap<>();
static class MyThread extends Thread{
char flag;
MyThread(char flag){
this.flag = flag;
}
@Override
public void run() {
while (true){
Object thisLock = m.get(flag);
char nextFlag = (char)('A' + (flag + 1) % 26);
Object nextObjectLock
synchronized (thisLock){
if (flag != globalFlag){
try {
thisLock.wait(); // 线程会被阻塞住,直到其他线程执行对应Lock.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(flag);
globalFlag = nextFlag;
}
// 唤醒下一个线程
Object nextObjectLock = m.get(nextFlag);
synchronized(nextObjectLock){
nextObjectLock.notify(); // 通知执行nextObjectLock.wait()的线程可以继续执行
}
}
}
}
public static void main(String[] args) {
for (int i = 0; i < 26; i++) {
m.put((char)('A' + i),new Object());
}
for (int i = 0; i < 26; i++) {
new MyThread((char)('A' + i)).start();
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个 flag 是 'A' ,不是 0 啊 ...
'A' + ('A' + 1) %26 , 就变成多少了 ...
应该是