java中的多线程使用固定数量的线程来处理许多任务

时间:2017-10-31 15:17:30

标签: java multithreading java-threads

我只是想了解更多有关线程的信息。我正在尝试创建一个可以使用10个线程处理10,000个任务(例如消息)的应用程序。

之前我曾尝试为每项任务创建一个帖子但是它会给出内存"内存不足"异常。

有什么可以请告诉我如何实现这一目标?并使用10个线程处理10,000条消息并避免任何"内存不足"异常?

抱歉,我没有可用的演示代码,因此无法上传示例代码

2 个答案:

答案 0 :(得分:0)

使用通过调用

实例化的10个线程中的Fixed Thread Pool
ExecutorService pool = ExecutoService.newFixedThreadPool(10);

然后通过在池上调用(10000次)execute来运行你的线程

pool.execute(new Runnable() {

     public void run() { //do stuff }
})

答案 1 :(得分:0)

试试这个。如果你想返回值,你可以使用未来的对象。如果你使用的是8以下的java版本。那么使用Callable匿名类而不是lambda表达式

 public static void main(String[] args){

    ExecutorService executorService = Executors.newFixedThreadPool(10);
    Future<Integer> future = null;
    try {
        for (int i = 0; i < 10000 ; i++) {
            int counter = i;
            try {
                future = executorService.submit(() -> {
                    System.out.println("hello i am process :"+counter +";Thread Id "+Thread.currentThread().getId());
                    return 1;
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } finally {
        executorService.shutdown();
    }
    try {
        executorService.awaitTermination(1, TimeUnit.HOURS);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }


}