比方说,我有一个使用Executor框架的应用程序 Executors.newSingleThreadExecutor().submit(new Runnable(){ @Override public void run(){ // do stuff } } 当我在debugging器中运行这个应用程序时,将使用以下(默认)名称创build一个线程: Thread[pool-1-thread-1] 。 正如你所看到的,这不是非常有用的,据我所知, Executor框架不提供一个简单的方法来命名创build的线程或线程池。 那么,如何为线程/线程池提供名称呢? 比如Thread[FooPool-FooThread] 。
如果返回的值不是我所关心的,我应该如何selectExecutorService的 提交还是执行 ? 如果我testing两者,除了返回值之外,我没有看到两者之间的差异。 ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.execute(new Task()); ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.submit(new Task());
我正在尝试使用Java的ThreadPoolExecutor类来运行具有固定数量的线程的大量重量级任务。 每个任务都有很多地方可能由于例外而失败。 我已经子类ThreadPoolExecutor ,我已经重写了afterExecute方法应该提供任何运行任务时遇到的未捕获的exception。 但是,我似乎无法使其工作。 例如: public class ThreadPoolErrors extends ThreadPoolExecutor { public ThreadPoolErrors() { super( 1, // core threads 1, // max threads 1, // timeout TimeUnit.MINUTES, // timeout units new LinkedBlockingQueue<Runnable>() // work queue ); } protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); if(t != null) { System.out.println("Got an error: " […]
我有一个简单的Java ExecutorService运行一些任务对象(实现Callable )。 ExecutorService exec = Executors.newSingleThreadExecutor(); List<CallableTask> tasks = new ArrayList<>(); // … create some tasks for (CallableTask task : tasks) { Future future = exec.submit(task); result = (String) future.get(timeout, TimeUnit.SECONDS); // TASKS load some classes and invoke their methods (they may create additional threads) // … catch interruptions and timeouts } exec.shutdownNow(); 所有任务完成后(DONE或TIMEOUT-ed),我尝试closures执行程序,但不会停止: […]
等待ExecutorService所有任务完成的最简单方法是什么? 我的任务主要是计算,所以我只想运行大量的工作 – 每个核心都有一个。 现在我的设置看起来像这样: ExecutorService es = Executors.newFixedThreadPool(2); for (DataTable singleTable : uniquePhrases) { es.execute(new ComputeDTask(singleTable)); } try{ es.wait(); } catch (InterruptedException e){ e.printStackTrace(); } ComputeDTask实现可运行。 这似乎正确地执行任务,但代码崩溃在wait() IllegalMonitorStateException 。 这很奇怪,因为我玩了一些玩具的例子,似乎工作。 uniquePhrases包含数以万计的元素。 我应该使用另一种方法吗? 我正在寻找尽可能简单的事情
我正在寻找一个可以提供超时的ExecutorService实现。 如果提交给ExecutorService的任务的运行时间超过了超时时间,则会中断该任务。 实现这样一个野兽并不是一件困难的事情,但是我想知道是否有人知道现有的实现。 以下是我在下面的一些讨论中提出的。 任何意见? import java.util.List; import java.util.concurrent.*; public class TimeoutThreadPoolExecutor extends ThreadPoolExecutor { private final long timeout; private final TimeUnit timeoutUnit; private final ScheduledExecutorService timeoutExecutor = Executors.newSingleThreadScheduledExecutor(); private final ConcurrentMap<Runnable, ScheduledFuture> runningTasks = new ConcurrentHashMap<Runnable, ScheduledFuture>(); public TimeoutThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, long timeout, TimeUnit timeoutUnit) { super(corePoolSize, […]
我需要一次执行一些任务4,如下所示: ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(…) { taskExecutor.execute(new MyTask()); } //…wait for completion somehow 一旦所有这些都完成,我怎么能得到通知? 现在我想不出比设置一些全局任务计数器好多less,并在每个任务结束时减less它,然后在无限循环监视这个计数器变成0; 或者得到一份期货清单,并在无限循环监测isDone所有这些。 什么是不涉及无限循环的更好的解决scheme? 谢谢。
我有我使用java.util.timer计划任务的代码。 我环顾四周,看到ExecutorService可以做同样的事情。 所以这里的这个问题,你使用Timer和ExecutorService来调度任务,一个使用另一个的好处是什么? 也想检查是否有人使用了Timer类,并遇到ExecutorService为他们解决的任何问题。