我只是想学习更多关于线程的知识。我试图创建一个应用程序,可以处理10000个任务(例如消息)使用10线程。以前我试图为每个任务创建一个线程,但它给出了“内存不足”的异常。有谁能告诉我怎样才能做到这一点吗?使用10个线程处理10000条消息,并避免任何“内存不足”异常?抱歉,我没有可用的演示代码,所以我不能上传示例代码
q35jwt9p1#
试试这个。如果你想返回值,你可以使用future对象。如果你使用的是低于8的java版本。那么使用可调用匿名类而不是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(); } }
zsohkypk2#
使用由10个线程组成的固定线程池,通过调用
ExecutorService pool = ExecutoService.newFixedThreadPool(10);
然后通过调用运行线程(10000次) execute 在游泳池里
execute
pool.execute(new Runnable() { public void run() { //do stuff } })
2条答案
按热度按时间q35jwt9p1#
试试这个。如果你想返回值,你可以使用future对象。如果你使用的是低于8的java版本。那么使用可调用匿名类而不是lambda表达式
zsohkypk2#
使用由10个线程组成的固定线程池,通过调用
然后通过调用运行线程(10000次)
execute
在游泳池里