我只是想了解更多有关线程的信息。我正在尝试创建一个可以使用10个线程处理10,000个任务(例如消息)的应用程序。
之前我曾尝试为每项任务创建一个帖子但是它会给出内存"内存不足"异常。
有什么可以请告诉我如何实现这一目标?并使用10个线程处理10,000条消息并避免任何"内存不足"异常?
抱歉,我没有可用的演示代码,因此无法上传示例代码
答案 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();
}
}