相关疑难解决方法(0)

如何使用Java 5中的ExecutorService实现任务优先级划分?

我正在实现一个线程池机制,我想在其中执行不同优先级的任务.我想有一个很好的机制,我可以向服务提交一个高优先级的任务,并在其他任务之前安排它.任务的优先级是任务本身的内在属性(我是否表达任务作为CallableRunnable不重要的是我).

现在,从表面上看,我可以使用a PriorityBlockingQueue作为我的任务队列ThreadPoolExecutor,但该队列包含Runnable对象,这可能是也可能不是Runnable我提交给它的任务.而且,如果我已经提交了Callable任务,那么就不清楚它是如何映射的.

有没有办法做到这一点?我真的宁愿不为此而努力,因为我更有可能以这种方式弄错.

(旁白;是的,我知道在这样的事情中,低优先级工作可能会出现饥饿.对于有合理保证公平性的解决方案,可以加分(?!))

java concurrency multithreading

43
推荐指数
2
解决办法
2万
查看次数

如何创建LIFO执行器?

我想创建一个线程池,它将执行最近提交的任务.关于如何实现这一目标的任何建议?

谢谢

java multithreading threadpool

16
推荐指数
2
解决办法
5810
查看次数

在ThreadPoolExecutor中测试PriorityBlockingQueue

我在这个例子中实现了我的ThreadPoolExecutor和PriorityBlockingQueue:https: //stackoverflow.com/a/12722648/2206775

并写了一个测试:

PriorityExecutor executorService = (PriorityExecutor)  PriorityExecutor.newFixedThreadPool(16);
    executorService.submit(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
                Thread.sleep(1000);
                System.out.println("1");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }, 1);

    executorService.submit(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
                Thread.sleep(1000);
                System.out.println("3");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }, 3);

    executorService.submit(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
                Thread.sleep(1000);
                System.out.println("2");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }, 2);

    executorService.submit(new …
Run Code Online (Sandbox Code Playgroud)

java multithreading priority-queue threadpool threadpoolexecutor

4
推荐指数
1
解决办法
4046
查看次数