繁体   English   中英

等待Java中任务执行的线程池

[英]Thread pool with wait for execution of task in java

我想在java中创建一个线程池代码,其中task将等待,直到task中调用的函数完成。 我已经看过很多例子,但到目前为止还无法实现我的目标。

public class ThreadController {

    public static void main(String args[]) {
        ExecutorService service = Executors.newFixedThreadPool(5);

        List<String> list = new ArrayList<String>();
        list.add("john");
        list.add("reck");
        list.add("moni");
        list.add("sasha");
        list.add("pely");
        for (int p = 0; p < 100; p++) {
            for (int r = 0; r < 5; r++) {
                Task task = new Task(list.get(r));
                service.submit(task);
            }
        }
    }
}

final class Task implements Runnable {

    private String taskSimNo;

    public Task(String no) {
        this.taskSimNo = no;
    }

    public void run() {
        Initiate.startingInitiate(this.taskSimNo);
    }
}

该函数的完整思想是调用一个函数process(),它是mainMethod类的方法。 所以我想并行运行10个线程,但是第11个任务应该仅在10个任务中的任何一个完成执行时才开始,因此我需要实现wait函数来使任务完成。 有任何建议请。

与task.wait()同步的块只会阻塞循环,因为在任何时候都不会调用notify方法。 因此,您首先需要删除它。

其次,您的处理方法不会从任何多线程中受益,因为它是在构造函数中调用的,而对象的创建是由主线程完成的。 解决方案是将处理方法移到运行方法内。

您已为线程池正确分配了一个限制,以允许10个并发任务运行。

注意:不能保证订购! 例如,任务11可能在任务8之前运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM