Tag: java.util.concurrent

是否使用invokeAll或submit – java Executor服务

我有一个场景,我必须为同一个callable异步执行5个线程。 据我了解,有两种选择: 1)使用submit(Callable) ExecutorService executorService = Executors.newFixedThreadPool(5); List<Future> futures = new ArrayList(); for(Callable callableItem: myCallableList){ futures.add(executorService.submit(callableItem)); } 2)使用invokeAll(Callable集合) ExecutorService executorService = Executors.newFixedThreadPool(5); List<Future> futures = executorService.invokeAll(myCallableList)); 应该是什么首选方式? 与其他产品相比,它们中的任何产品是否存在任何劣势或性能影响?

非multithreading程序中的java.util.ConcurrentModificationException

嘿SO Guru我的这个代码有一份工作 public void kill(double GrowthRate, int Death) { int before = population.size(); for (PopulationMember p : population) { int[] probs = ProbablityArrayDeath(GrowthRate,Death,(int)p.fitness()); if (probs[RandomNumberGen.nextRandomInt(0, 99)]==0) { population.remove(p); } } System.out.println(“Intial Population: “+before+”, Deaths:”+(before- population.size())+”, New Population: “+population.size()); } 当我第一次尝试运行代码时运行我的程序时,它会遇到此错误 Exception in thread “main” java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828) at Genetics.Population.kill(Population.java:181) at Genetics.Population.run(Population.java:47) at Control.Main.main(Main.java:35) […]

ExecutorService.invokeAll不支持可运行任务的收集

想通过ExecutorService的 invokeAll(..)方法运行Runnable任务的集合。 但是现在不支持( 仅支持可调用任务的集合 ) 有什么具体的原因吗? 做类似事情的替代方案是什么。

按顺序运行Java线程

你将如何顺序执行三个线程? 例如。 Thread1,Thread2,Thread3。 无法将一个Thread的引用传递给另一个并从run()方法调用。 所以代码应该是这样的: Thread1.start(); Thread2.start(); Thread3.start(); 应该是 Printing Thread1 Printing Thread2 Printing Thread3 这可以通过使用ThreadPoolExecutor并使用阻塞队列来实现,但即便这样也不是可接受的答案。

如何正确使用Java Executor?

我在我的multithreading应用程序中使用过Java Executors,但我似乎无法弄清楚何时最好使用以下各种方法: 1。 ExecutorService executor=Executors.newFixedThreadPool(50); executor.execute(new A_Runner(… some parameter …)); executor.shutdown(); while (!executor.isTerminated()) { Thread.sleep(100); } 2。 int Page_Count=200; ExecutorService executor=Executors.newFixedThreadPool(50); doneSignal=new CountDownLatch(Page_Count); for (int i=0;i<Page_Count;i++) executor.execute(new A_Runner(doneSignal, … some parameter …)); doneSignal.await(); executor.shutdown(); while (!executor.isTerminated()) { Thread.sleep(100); } 3。 int Executor_Count=30; ThreadPoolExecutor executor=new ThreadPoolExecutor(Executor_Count,Executor_Count*2,1,TimeUnit.SECONDS,new LinkedBlockingQueue()); List<Future> futures=new ArrayList(3330); for (int i=0;i<50;i++) futures.add(executor.submit(new A_Runner(… some […]