关于JAVA线程池的一个问题,请各位大虾指教

各位大虾,兄弟我最近用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);
}

}
}

3个回答

@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();
看看这个对你有帮助没

确定代码没问题的情况下,(传值是否正确),开启多线程,打开JVM监控线程情况,查看cpu使用状态。打印看看,线程池是否正确的走完一个流程

程序已经调好。在调试过程中收获了一些经验,愿分享:1、summit方法可能藏匿问题(不显示一些空指针异常之类的信息),使用exacute方法后则无此问题。2、避免一些基本的愚蠢操作(本应用开发原代码中,反复检查后才发现犯了一些基础错误,如应实现runnable接口而不是继承Thread类;再如并发时remove方法在当前代码中不起作用等)。3、在编写并发代码时,在心里要时时想着“并发”,不要在潜意识里还在以传统方式思考问题。
共有两位小哥回答了问题,在此一并感谢你们的热心!
好像只能采纳一个答案,我只能选择其中的一位给C币,委屈另一位了!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
小弟刚学java写了个简单的计算器
写的比较粗糙,请各位大虾指教.。。。。。。。。。。。。。。。。。。。。。。
web自定义文件上传控件
是本人的第一个作品,请各位大虾多指教
请各位大虾指教,字符串问题
#include #include main(){  char *p=" ";  char *sp="abcdefg";  int i=0;  char c;  while (1)  {    if ((c=getch())!=/r)     {      putch(c);       *(p+i)=c;       i++;     }    else     {      *(p+i)=
ds1302c语言程序
基于ds1302写的一个万年历c程序,,有不合适的请各位大虾指教
cmugo测试文件
这是cmugo的一个测试报告,各位大虾可以随时提出指教
有关于c#操作excel的问题 请各位大虾指教
我用c#写了个程序是将DataGrid中的数据写入excel的写入成功.但是现在我想在写入的excel中加一行标题也就是如何用程序在excel中设置显示格式(合并单元格,设置字体)public void CM_WriteDSToExcel( string dtime ) {            string strFile = "";            string path = "";
鼠标经过切换显示内容特效
一个简单的鼠标经过特效,送给初学者。希望各位大虾多指教。
C语言多机通讯(程序写的不是很好欢迎指教)
分主机和从机两份程序在里面!希望各位大虾指教指教!
请各位大虾多多指教!
我想将来从事移动应用开发,我现在考研要读什么方向啊?本人现在不清楚,请各位帮帮我。另外,读这个方向的研究生什么大学的实力比较强啊?
请各位大虾多多指教
我是大一的新生,现在我想成为编程高手,要怎么做呀!!!
如何锻炼分析问题的方法?请各位大虾指教~~
最近在solaris下移植heartbeat模块,遇到了一个问题,就是连接其他节点的crm应用程序,有时出现连接失败的问题。rn有时返回return -5,有时return-6rn代码如下:rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include //struct ifco
带闹铃液晶数字钟汇编程序
采用12864液晶,DS1302时钟芯片,51单片机数字闹钟,刚接触编程的菜鸟写的,请各位大虾指教。
window xp安装不了的问题,请各位大虾指教
我的电脑在装winxp时出现"File setupdd.sys could not be load.The error code is 4"我格式化C盘仍然是这个错误提示,我检查我的硬盘也没发现错误但就是装不了系统,我不想把别的盘的东西丢掉,请问怎么解决这个问题,请各位大虾帮忙,高分相送!谢谢!
java 线程池面试题
Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。 2. 多线程编程的好处是什么?  在多线程程序中,多个线程被
新人请多指教,自我介绍
自我介绍,新人请多指教
Java线程池的几种实现 及 常见问题讲解
工作中,经常会涉及到线程。比如有些任务,经常会交与线程去异步执行。抑或服务端程序为每个请求单独建立一个线程处理任务。线程之外的,比如我们用的数据库连接。这些创建销毁或者打开关闭的操作,非常影响系统性能。所以,“池”的用处就凸显出来了。   1. 为什么要使用线程池 在3.6.1节介绍的实现方式中,对每个客户都分配一个新的工作线程。当工作线程与客户通信结束,这个线程就被销毁。这种实
关于check复选的问题,请指教,谢谢!
关于check复选的问题,请指教,谢谢!
Hadoop CountWord 例子
Java实现的 Hadoop CountWord 例子,请各位多指教。
第三天 : 线程池的使用(面试)
去面试遇到的问题现在给大家分享一下,希望对java初学者有用!
关于.net的自定义控件(请各位大虾指正)
<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"
那位高手请指教小弟,网球游戏算法?????
跪求,网球游戏算法????十万火急!!
springmvc+spring线程池处理http并发请求数据同步控制问题
springmvc+spring线程池处理http并发请求数据同步控制问题
大虾指教!!!!
 已知两个有序表SA、SB,其元素均为递增有序,将此两表归并成一个新的有序表SC,并保持递增顺序。 求一完整代码
一个搞不懂的C++程序,请各位指教
从一本书上抄下来的程序: #include #include void main(int argc,char *argv[]){ int m,n,i;long sum=0; if(argc!=3) { cout  return; } m=atoi(argv[1]);n=atoi(argv[2]); if ((m=n)||(n>32000))  { cout   return;  } for(i
【面试】线程/线程池总结
打个模板,有时间慢慢填空 线程总结 1.      什么是线程,什么是进程,线程和进程有什么区别? 2.      使用线程的优点和缺点是什么 3.      普通java程序中有线程吗(JVM中的线程) 4.      线程的名字 5.      线程的状态【重要】 6.      线程的创建方式之一:继承Thread类 7.      CPU的执行资格,和执行权
java - 各位相加 O(1)
给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。 您在真实的面试中是否遇到过这个题?  Yes 样例 给出 num = 38。 相加的过程如下:3 + 8 = 11,1 + 1 = 2。因为 2 只剩下一个数字,所以返回 2。 挑战  你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个
初来乍到,请各位前辈指教
初来乍到,请各位前辈指教 
任给十进制的正整数,请从高位到低位逐位输出各位数字(递归算法)
package practice;public class Test5 { void fP(int n){//正序输出每一位 if(n<10) System.out.println(n); else{ fP(n/10); System.out.println(n%10);
一个关于积分的公式实现
一个关于积分的公式,不知道怎么用实现,求助各位大虾帮忙
java中常用的五种线程池的实现
java中常用的五种线程池的实现
任给十进制的正整数,请从低位到高位(从高位到低位)逐位输出个位数字
/*任给十进制的正整数,请从低位到高位逐位输出个位数字*//*循环*/#include&amp;lt;stdio.h&amp;gt;int main(){ int n; scanf(&quot;%d&quot;,&amp;amp;n); while(n&amp;gt;=10) { printf(&quot;%d,&quot;,n%10); n=n/10; } printf(&quot;%d\n&quot;,n);}/*递归*/#include&amp;lt;stdio.h&amp;gt;void f..
c#文本编辑器源码,一个菜鸟写的
c#文本编辑器源码,一个C#菜鸟写的文本编辑器。请各位大虾指点,批评。
用C++写的电梯运行模型
这是我同学做的一个电梯模型代码,请各位大虾给点意见或建议吧
易语言 登陆器 源码
这是我做的一个易语言登陆器的源码,请各位大虾改善改善! 谢谢!
科学研究与大数据概念的滥用
在科学领域,首先要定义的就是你的科学研究目标,目标必须要界定清晰,那么你的数据结构一开始就要设计得符合你的研究目标,这样才能有目的性的开展工作,如果不预先进行详细界定和设计,在研究的过程中就会导致目标的弱化以至于迷失。
Java 面试准备系列-4 线程池
使用线程池的意义: 复用:类似WEB服务器等系统,长期来看内部需要使用大量的线程处理请求,而单次请求响应时间通常比较短,此时Java基于操作系统的本地调用 方式大量的创建和销毁线程本身会成为系统的一个性能瓶颈和资源浪费。若使用线程池技术可以实现工作线程的复用,即一个工作线程创建和销毁的生命周期期间内 可以执行处理多个任务,从而总体上降低线程创建和销毁的频率和时间,提升了系统性能。 流控
与ATA的资料一些笔记
关于ATA7.0学习资料,希望对各位大虾有用。
集合运算及关系运算
在下不才初学java,用java写了一个求两个集合的集合运算,若程序中有漏洞请各位大虾指出谢谢啦!
C语言实现扫雷程序代码
请各位大虾帮我看下,解释下,我放文本文档里
模拟struts
我手写的struts,有什么不足请各位大虾多多指教~~
相关热词 c#panel增加滚动条 c#中生成的dll文件 c# 模板类 c# 截取txt文本内容 c# 内存 占用 c#时间格式化 不带- c#替换字符串中指定位置 c# rdlc 动态报表 c# 获取txt编码格式 c#事件主动调用