JAVA 线程池使用
来源:互联网 发布:淘宝企业开店店铺名称 编辑:程序博客网 时间:2024/06/09 20:09
在java中,创建一个线程执行任务可以用以下方法:
Runnable task = new Runnable() {@Overridepublic void run() {//do sth.}};new Thread(task).start();如果只执行一个任务,那么这样很方便,但是对大量的任务来说这样是低效的,因为需要为每个Runnable任务创建一个线程来执行。
如果程序中创建了大量生命周期很短的线程,应该使用线程池。线程池中包含许多准备运行的空闲线程,执行完任务后,线程不会死亡,而是准备为下一个请求提供服务,使用线程池可以减少并发线程的数量。
Java提供Executor接口来执行线程池中的任务,它的子接口ExecutorService用于管理任务,Executors类提供了一些静态工厂方法用来构建线程池。
Executors类一些常用方法:
newCachedThreadPool:创建线程池包含必要的线程数量,当之前创建的线程可用时,会重用,如果没有可用的线程,将创建新的线程。空闲的线程将会保留60秒。线程池中的线程数没有上限。
newFixedThreadPool:创建固定数量上限的线程池,空闲线程会一直保留直到调用shutdown。当提交的任务超过了线程上限,线程池中的线程都在执行时,多余的任务处于等待状态。
newSingleThreadExecutor:创建只包含一个线程的线程池,这个线程按照提交顺序执行每个任务。
newScheduledThreadPool:创建一个可以在一定时间后执行任务的线程池。
newSingleThreadScheduledExecutor:创建一个包含一个线程的,可以在一定时间后执行任务的线程池。
newCachedThreadPool:
public class ThreadTest {public static void main(String[] args) {Runnable r1 = new NewRunnable("1");Runnable r2 = new NewRunnable("2");Runnable r3 = new NewRunnable("3");ExecutorService executorService = Executors.newCachedThreadPool();executorService.execute(r1);executorService.execute(r2);executorService.execute(r3);}}class NewRunnable implements Runnable {private String name;public NewRunnable(String name) {this.name = name;}@Overridepublic void run() {System.out.println("Runnable:" + name);}}输出:
Runnable:1
Runnable:3
Runnable:2
newFixedThreadPool:
ExecutorService executorService = Executors.newFixedThreadPool(2);executorService.execute(r1);executorService.execute(r2);executorService.execute(r3);输出:
Runnable:1
Runnable:3
Runnable:2
newSingleThreadExecutor:
Runnable r1 = new NewRunnable("1");Runnable r2 = new NewRunnable("2");Runnable r3 = new NewRunnable("3");ExecutorService executorService = Executors.newSingleThreadExecutor();executorService.execute(r1);executorService.execute(r2);executorService.execute(r3);输出:
Runnable:1
Runnable:2
Runnable:3
注意,这里任务是按照execute的提交顺序执行的。
0 0
- Java线程池使用
- Java线程池使用
- Java线程池使用
- JAVA 线程池使用
- Java线程池使用
- java线程池使用
- java线程池使用
- java线程池使用
- Java线程池使用
- java线程池使用
- java线程和线程池的使用
- Java使用线程池和线程工厂
- java 线程池的使用
- java线程池使用实例
- java线程池的使用
- Java线程池的使用
- java多线程 线程池使用
- Java线程池的使用
- VS2012 C# 单元测试
- Kivy A to Z -- Kivy的消息处理机制
- PrepareStatement与Statement之间的区别
- spring集成 quartz
- 程序猿的未来与学习建议
- JAVA 线程池使用
- Java杂谈三之判断素数以及穷举素数
- jQuery_review之table中根据行选中,进行背景变色和radio选中
- UDP
- getch getche getchar的区别和缓冲区的概念
- 关于使用UDP套接字进行本地进程通信
- 假期算法学习
- 同过apache-commons-id.jar生成32为主键id
- rdryfyuguiygiuti