KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm using a ThreadPoolExecutor to run tasks. The backend is a SynchronousQueue , so if the executor is already perfoming a task, it throws the RejectedExecutionException . Here's a simple test case: public class ExecutorTest { final static Worker worker = new Worker(); public static void main(String[] args) { ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>()); while (true) { try { executor.execute(worker); }catch (RejectedExecutionException e) { } } } static class Worker implements Runnable { private int i = 0; private long start = System.currentTimeMillis(); @Override public void run() { try { Thread.sleep(1000); System.out.println(++i + " " + (System.currentTimeMillis() - start)); } catch (InterruptedException ex) { } } } } The expected bahavious is: Execute the worker and after sleeping for a second, print out i (representing how often the worker has been executed so far) and the amount of milliseconds since the worker was created. So I'm expecting: 1 1015 2 2015 3 3016 4 4017 This works fine for a while, but after almost on hour: 2919 2922196 2920 2942951 2921 2990407 So the amount of time between one worker execution and the next one is 20 seconds (2919->2920) and 38 seconds (2920->2921) and so forth.
Tags (comma-separated)
Save Edits
Cancel