深圳网站商城建设,行业网站建设哪家专业,免费网站app软件,织梦系统如何做网站线程池 线程池创建线程池关闭线程池使用获取多个结果 线程池
一个线程池中存在许多准备运行的空闲线程#xff0c;把Runnable对象交给线程池#xff0c;会有一个线程调用其run()方法#xff0c;当调用完后线程不会死亡#xff0c;而是在池中继续为下一次请求服务
利用线程… 线程池 线程池创建线程池关闭线程池使用获取多个结果 线程池
一个线程池中存在许多准备运行的空闲线程把Runnable对象交给线程池会有一个线程调用其run()方法当调用完后线程不会死亡而是在池中继续为下一次请求服务
利用线程池可避免创建大量生命周期很短的线程同时也可限制并发线程的数目
创建线程池
创建方法备注Executors.newCachedThreadPool()若线程池无可用空闲线程则创建一个空闲线程保留60秒Executors.newFixedThreadPool(int)构建固定大小的线程池空闲线程会一直保留若任务数线程数其余的任务置于队列中Executors.newSingleThreadExecutor()大小为1的线程池按顺序执行任务Executors.newScheduledThreadPool(int)创建预定执行的线程池
上面方法都返回实现了ExecutorService接口的ThreadPoolExecutor类可用下面的方法将Runnable或Callable传给ExecutorService
创建方法备注Future? submit(Runnable task)get()方法完成后返回nullFutureT submit(Runnable task, T result)get()方法完成后返回resultFuture? submit(Callable task)计算好后才返回Future对象
关闭线程池
shundown关闭后不再接受新的任务当内部的任务都完成后池中的线程死亡shundownNow取消尚未开始的所有任务并试图中断正在运行的线程
使用
若要获取到结果可通过submit()方法返回future
ExecutorService executorService Executors.newCachedThreadPool();
executorService.submit(new Runnable() {Overridepublic void run() {}
});
executorService.shutdown();获取多个结果
ExecutorService.invokeAny()提交一个Callable的集合并返回某个已完成任务的Future但不能确定是哪个任务ExecutorService.invokeAll()提交一个Callable的集合并返回所有任务的Future集合但当一个任务耗时过长时其他任务也得等待new ExecutorCompletionService(Executors.newCachedThreadPool())构建ExecutorCompletionService管理future对象的阻塞队列其包含了完成任务的执行结果