A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xkfxm 中级黑马   /  2013-8-11 16:10  /  1260 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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次)吗?

评分

参与人数 1技术分 +1 收起 理由
以防万一 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
首先您创建了3个线程,线程用一个少一个,这里应该就牵扯到了同步的问题,第一个线程sleep了,就应该让剩下的2个线程去执行别的任务,不要再次执行被暂停的那个任务了,因为这样就可能导致同样的任务有三个线程在执行。
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

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


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马