Java中线程池创建与使用
来源:互联网 发布:js搅拌机型号 编辑:程序博客网 时间:2024/05/01 16:19
线程池是Java5以后添加的内容,使用Executors工具类可以创建4种线程池
一、线程数量固定的线程池
public class ThreadPoolTest{ public static void main(String[] args) { /* * 创建固定的线程池 * 1、线程池中始终存在3条线程 */ ExecutorService threadPool = Executors.newFixedThreadPool(3); //共有10个任务需要执行 for(int i = 0; i < 10; i++) { final int task = i; threadPool.execute(new Runnable() { @Override public void run() { for(int i = 0; i < 10; i++) { try { Thread.sleep(30); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } /* * 根据控制台的输出结果可以知道,不管有多少任务需要执行, * 线程池都是使用已经存在的3条线程,完成当前的任务后,再去执行在线程池中等待的其他任务 */ System.out.println(Thread.currentThread().getName() + "-time:" + i + "#task:" + task); } } }); } /* * 任务完成后 别忘了关闭线程池。。。 * 等待提交的任务完成后,关闭线程池 */ threadPool.shutdown(); /* * 根据JDK文档描述,线程池会调用Thread.interrupt()来实现中断线程, * 但是interrupt()作用有限,如果线程没有处于sleep 、wait等状态的, * 则无法终止当前线程。 * 所以shutdownNow()不代表线程池立即能关闭 * */ //threadPool.shutdownNow(); }}
二、线程数量不定的缓存线程池
public class ThreadPoolTest{ public static void main(String[] args) { /* * 创建缓存线程池 * 1、线程池中的线程数不一定 * 根据JDK文档的描述 线程池会根据需要创建新的线程, * 但是也会重用以前创建的处于空闲状态的线程,如果一个 * 线程60秒没有被使用,将会被终止 并被从缓存区移除 */ ExecutorService threadPool = Executors.newCachedThreadPool(); //共有10个任务需要执行 for(int i = 0; i < 10; i++) { final int task = i; threadPool.execute(new Runnable() { @Override public void run() { for(int i = 0; i < 10; i++) { try { Thread.sleep(30); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } /* * 根据控制台的输出结果可以知道,确实是根据需要创建了10条线程 */ System.out.println(Thread.currentThread().getName() + "-time:" + i + "#task:" + task); } } }); } /* * 任务完成后 别忘了关闭线程池。。。 * 等待提交的任务完成后,关闭线程池 */ threadPool.shutdown(); /* * 根据JDK文档描述,线程池会调用Thread.interrupt()来实现中断线程, * 但是interrupt()作用有限,如果线程没有处于sleep 、wait等状态的, * 则无法终止当前线程。 * 所以shutdownNow()不代表线程池立即能关闭 * */ //threadPool.shutdownNow(); }}
public class ThreadPoolTest{ public static void main(String[] args) { /* * 创建单一线程的线程池 * 1、线程池中的线程数只有一条 * 根据JDK文档的描述 线程池一直存在一条单一的 * 线程用来执行任务,如果这条线程结束后, * 会根据需要重新创建一条新的线程来执行任务 */ ExecutorService threadPool = Executors.newSingleThreadExecutor(); //共有10个任务需要执行 for(int i = 0; i < 10; i++) { final int task = i; threadPool.execute(new Runnable() { @Override public void run() { for(int i = 0; i < 10; i++) { try { Thread.sleep(30); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } /* * 根据控制台的输出结果可以知道,线程池中始终只有一条线程 */ System.out.println(Thread.currentThread().getName() + "-time:" + i + "#task:" + task); } } }); } /* * 任务完成后 别忘了关闭线程池。。。 * 等待提交的任务完成后,关闭线程池 */ threadPool.shutdown(); /* * 根据JDK文档描述,线程池会调用Thread.interrupt()来实现中断线程, * 但是interrupt()作用有限,如果线程没有处于sleep 、wait等状态的, * 则无法终止当前线程。 * 所以shutdownNow()不代表线程池立即能关闭 * */ //threadPool.shutdownNow(); }}
四、创建调度任务的线程池
public class ThreadPoolTest{ public static void main(String[] args) { /* * 创建调度任务的线程池 确定了延迟时间后执行 */ Executors.newScheduledThreadPool(1).schedule(new Runnable() { @Override public void run() { System.out.println("boom!"); } }, 2, TimeUnit.SECONDS); /* * 创建调度任务的线程池 含固定频率 */ Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("boom-2!"); } }, 2, 1, TimeUnit.SECONDS); }}
0 0
- Java中线程池创建与使用
- Executors与ThreadPoolExecutor(阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建)
- 线程创建与使用
- java中线程创建
- Java线程与创建Java程序中的线程池
- 线程池的创建与使用
- Java 使用Executors创建线程池
- 理解Java与Android中线程与线程池的原理和使用
- Java中线程的创建使用及其安全问题
- 线程的创建与使用
- 线程的创建与使用
- Java线程:创建与启动
- Java线程:创建与启动
- Java线程:创建与启动
- Java线程:创建与启动
- Java线程:创建与启动
- Java线程:创建与启动
- Java线程:创建与启动
- 多边形问题( 判断一个点在不在多边形内)
- opencv 卡尔曼滤波器例子,自己修改过
- MVC3的404页面设置的方法
- UVA10791- Minimum Sum LCM
- 超级负载均衡
- Java中线程池创建与使用
- 嵌入式---中断
- 矩阵连乘问题(C++)
- poj 2485 Highways(kruscal or prim最小生成树)
- C++Primer学习札记_指针和const限定符
- PM中的挣值管理
- <PY><core python programming笔记>C6 序列:字符串和列表和元组(三)
- lianjie
- android webview支持<input type="file"类型