黑马程序员技术交流社区

标题: 关于线程池中线程执行任务的问题 [打印本页]

作者: xkfxm    时间: 2013-8-11 16:10
标题: 关于线程池中线程执行任务的问题
本帖最后由 xkfxm 于 2013-8-15 18:31 编辑
  1. //创建一个可以装3个线程的池子
  2. ExecutorService threadPool = Executors.newFixedThreadPool(3);
  3. for(int i=1;i<=10;i++)//向线程池中扔循环10个任务
  4. {
  5. final int task = i;
  6. //往池中扔一个任务;执行已提交的 Runnable 任务的对象
  7. threadPool.execute(new Runnable(){
  8. public void run()
  9. {

  10. //任务循环10次
  11. for(int j=1;j<=5;j++)
  12. {
  13. try {
  14. //让当前线程睡20毫秒。此任务还没做完,
  15. //其他线程就去执行另一个任务。当这个线程醒后接着完成这个任务
  16. Thread.sleep(20);
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }
  20. System.out.println(Thread.currentThread().getName()+" is looping of "+j+" for task "+task);
  21. }
  22. }});
  23. }

复制代码
线程池中有3个线程,往此线程池中扔10个任务,每个任务的run方法中有一个for循环(循环5次),
当一个线程去执行第一个任务的run方法时,只循环(内部循环)一次就让它sleep;那另外的线程就去执行别的任务。
这个地方有个疑问,一个任务只能被一个线程执行吗?
像那个任务没有执行完,线程等待了,别的线程能接着此线程去做这个任务(循环剩下的4次)吗?


作者: 龚首道    时间: 2013-8-11 16:53
首先您创建了3个线程,线程用一个少一个,这里应该就牵扯到了同步的问题,第一个线程sleep了,就应该让剩下的2个线程去执行别的任务,不要再次执行被暂停的那个任务了,因为这样就可能导致同样的任务有三个线程在执行。
作者: 以防万一    时间: 2013-8-13 22:20
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2