多线程中的task中的业务逻辑代码没有执行

KeepSayingNo 2016-07-16 09:45:32
写了一个task类实现了runnable接口

public class IncTask implements Runnable {

public void run() {
Thread thread = Thread.currentThread();
System.out.println("hello_____________"+thread.getId()+":"+thread.getName());

try{
// 执行入库的操作,代码省略
Thread.sleep(1000);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}

}

}


然后写了一个测试类,里面构建了一个线程池,进行操作

public class ThreadTest {
@Test
public void testThread() {
ExecutorService executor = Executors.newFixedThreadPool(3);

for(int i =0;i<6;i++){
IncTask incThread = new IncTask();
executor.execute(incThread);
}

executor.shutdown();
}
}


如果在IncTask 类中没有入库的代码,则会在执行结果中显示有3个线程总共进行了6次操作。但是如果有了入库的代码,则只会有3个线程进行了3次操作,但是没有入库的记录。请教大神怎么样能在有入库的代码的时候进行6次入库的操作。
...全文
294 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
run内操作db是如何实现的?多线程要结束连接池才行,连接释放db的操作拿到run外。
KeepSayingNo 2016-07-18
  • 打赏
  • 举报
回复
引用 4 楼 rickylin86的回复:
[quote=引用 2 楼 dotnetstudio 的回复:] 我说的就是IncTask 这个类只会执行system.println.out的操作,在try里面的业务代码就不会执行,例如插数据到数据库
那只能说明你数据库的操作代码有问题.[/quote] 我不用线程池,用单线程是可以的
rickylin86 2016-07-17
  • 打赏
  • 举报
回复
引用 2 楼 dotnetstudio 的回复:
我说的就是IncTask 这个类只会执行system.println.out的操作,在try里面的业务代码就不会执行,例如插数据到数据库
那只能说明你数据库的操作代码有问题.
rickylin86 2016-07-17
  • 打赏
  • 举报
回复
不明白你说的是什么. Executors.newFixedThreadPool(3)用这个新建的执行器同时间只能三个线程执行,其他的等待.然后有什么疑问吗?你说的入库是什么呢?
KeepSayingNo 2016-07-17
  • 打赏
  • 举报
回复
引用 1 楼 rickylin86 的回复:
不明白你说的是什么. Executors.newFixedThreadPool(3)用这个新建的执行器同时间只能三个线程执行,其他的等待.然后有什么疑问吗?你说的入库是什么呢?
是的,确实只有3个线程执行,然后会执行6次,但是IncTask中的try里面的插数据到数据库的操作不执行
KeepSayingNo 2016-07-17
  • 打赏
  • 举报
回复
我说的就是IncTask 这个类只会执行system.println.out的操作,在try里面的业务代码就不会执行,例如插数据到数据库

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧