首页 文章

ThreadPoolExecutor不是并发执行的?

提问于
浏览
-1

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

Runnable Class

public Tasks implement Runnable{
int taskCount;

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

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

}

Main Class

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() . 如果我有这样的事情怎么办?

  • 将所有taskObj添加到执行程序,不得调用run()

  • 一次执行所有任务对象 . 所有taskobj run()必须并行/并发执行

请告诉我

谢谢... V

1 回答

  • 0

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

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

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

    祝好运

相关问题