各位大虾,兄弟我最近用JAVA写了一个应用程序,其中用到了线程。现在的问题是:如果不使用线程池,则结果正确(测试了多次);若使用线程池,则结果一般不正确(结果中有时多出一些数据,有时少些数据)。
代码太长,不能全部贴出,只能贴出其基础逻辑。请高手指点改进方向或问题可能存在哪些方面。多谢!
附加信息(不知是否有用):兄弟机器的处理器为Intel(R) Core(TM) i5-5200U CPU @ 2.2GHz 2.19GHz
哪位大虾的回答如果真的有用,我会想办法追加C币,绝不食言!
public class PieceUpStarter {
...
public static ConcurrentHashMap map = new ConcurrentHashMap();
public static ConcurrentHashMap ttMap = new ConcurrentHashMap();
public static ConcurrentHashMap ftMap = new ConcurrentHashMap();
public static ExecutorService pool = Executors.newFixedThreadPool(5);
public static void main(String[] args) {
...
new Search().visit(map);
...
}
}
class SixDegreeBFS extends Thread {
ConcurrentHashMap map = null;
int i = 0;
public SixDegreeBFS(ConcurrentHashMap map, int i) {
this.map = map;
this.i = i;
}
public void run() {
if (map.get(i).getVisited() == 0) {
...
} else {
...
}
}
}
class Search {
void visit(ConcurrentHashMap map) {
...
for (Integer i : map.keySet()) {
Thread thread = new SixDegreeBFS(map, i.intValue());
PieceUpStarter.pool.submit(thread);
}
}
}
关于JAVA线程池的一个问题,请各位大虾指教
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- qq_38544577 2018-07-10 02:20关注
@Autowired
private TaskExecutor taskExecutor;
private CountDownLatch cdl=null;
@ResponseBody
@RequestMapping("/cc")
public void sys() throws InterruptedException{
List list =Collects.Collections.synchronizedList(new ArrayList());
for(int j=0;j<100000;j++){
list.add(j);
}
cdl=new CountDownLatch(list.size());
//线程池+同步块
for(int j=0;j<list.size();j++){
final int index=j;
taskExecutor.execute(new Runnable() {
@Override
public void run() {
System.out.println(list.get(index));
cdl.countDown();
}
});
}
cdl.await();
看看这个对你有帮助没本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
- ¥15 DruidDataSource一直closing
- ¥20 气象站点数据求取中~
- ¥15 如何获取APP内弹出的网址链接
- ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
- ¥50 STM32单片机传感器读取错误
- ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
- ¥15 (关键词-阻抗匹配,HFSS,RFID标签)
- ¥50 sft下载大文阻塞卡死
- ¥15 机器人轨迹规划相关问题