ThreadPoolExecutor不是并发执行的?

时间:2014-05-09 04:40:24

标签: multithreading concurrency threadpool executorservice

这仅用于我的学术目的。我们添加到执行程序服务的任务是否真正并行执行。这是我提出这个问题的例子

可运行的课程

public Tasks implement Runnable{
int taskCount;

public Tasks(int count){
this.taskCount = count;
}

public void run(){
System.out.println("In Task :"+taskcount +" run method");
}

}

主要类

Class MyTest {
public static void main(String args[]){
    ExecutorService service = Executors.newFixedThreadPool(10);

     for(inti=0;i<10;i++){
     Tasks taskObj = new Tasks(i);
     service.submit(taskObj);
   }
   service.shutdown();
}
}

只要我将taskObj提交给执行程序,就会调用taskObj run()。 如果我有这样的事情怎么办,

  1. 将所有taskObj添加到执行程序,不得调用run()
  2. 一次执行所有任务对象。所有taskobj run()必须并行/并发执行
  3. 请告诉我

    ...谢谢V

1 个答案:

答案 0 :(得分:0)

如果我理解正确,解决这个问题的一种方法是使用线程障碍。这可能听起来很奇怪,但实际上很容易实现。你只需要一个变量(让它命名为traffic-light)并使每个线程循环。如果你启动了足够多的线程(启动一个新线程可能会花费一些时间),你只需将其更改为绿色,所有线程将同时开始执行。

出于学术目的,我们习惯将原子整数作为计数器(用0初始化)并启动n个线程。每个线程的任务是增加计数器然后循环它直到它达到n。像这样,你将所有线程尽可能平行。

如果您仍想使用线程池系统,则可能必须实现自己的线程系统,线程可以在获取工作之前等待信号。

祝你好运