【发布时间】:2020-12-12 15:13:29
【问题描述】:
我在使用并行线程时遇到了一些麻烦。我将每个学生班级都设为一个线程,因此每个学生都需要请求一个团队。问题是它需要同时限制为 20 个请求。所以我在 StudentHandler 中做了这个:
int MAX = 20;
int ACTUAL = 0;
public boolean thereIsRoom(){
return ACTUAL < MAX;
}
public void requestTeam(Student student){
if(thereIsRoom()){
ACTUAL += 1;
System.out.println(ACTUAL);
for(int x=0; x<teams.size(); x++){
// student does stuff
}
ACTUAL -= 1;
System.out.println(ACTUAL);
}
}
输出如下:
1
stuff
0
1
2
3
4
stuff
.
.
31
等等,但我不明白为什么打印 ACTUAL 时超出了我的限制。如何解决?有必要让 StudentHandler 成为另一个线程吗?如果是那怎么办?
【问题讨论】:
-
“如何修复它?” 使代码线程安全。由于这是一个很大的话题,有许多潜在的解决方案,您需要开始研究(也称为研究)Java 中的线程安全主题,即并发编程 i> 在 Java 中。
标签: java multithreading parallel-processing