java线程池
2016-12-26 23:55
387 查看
1、为什么要用程池:一、减少线程创建和销毁开销 二、当前任务与主线程隔离,实现和主线程异步执行
2、线程池分类:
Java类库提供了许多静态方法来创建一个线程池:
a、newFixedThreadPool 创建一个固定长度的线程池,当到达线程最大数量时,线程池的规模将不再变化。
b、newCachedThreadPool 创建一个可缓存的线程池,如果当前线程池的规模超出了处理需求,将回收空的线程;当需求增加时,会增加线程数量;线程池规模无限制。
c、newSingleThreadPoolExecutor 创建一个单线程的Executor,确保任务对了,串行执行
d、newScheduledThreadPool 创建一个固定长度的线程池,而且以延迟或者定时的方式来执行,类似Timer;
3、
从上面的结果可以看出:
1、主线程的执行与线程池里的线程分开,有可能主线程结束了,但是线程池还在运行
2、放入线程池的线程并不一定会按其放入的先后而顺序执行
2、线程池分类:
Java类库提供了许多静态方法来创建一个线程池:
a、newFixedThreadPool 创建一个固定长度的线程池,当到达线程最大数量时,线程池的规模将不再变化。
b、newCachedThreadPool 创建一个可缓存的线程池,如果当前线程池的规模超出了处理需求,将回收空的线程;当需求增加时,会增加线程数量;线程池规模无限制。
c、newSingleThreadPoolExecutor 创建一个单线程的Executor,确保任务对了,串行执行
d、newScheduledThreadPool 创建一个固定长度的线程池,而且以延迟或者定时的方式来执行,类似Timer;
3、
package com.chen.threadpool; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestThreadpool_01 { public static void main(String[] args) { /*ExecutorService es = Executors.newCachedThreadPool(); int cpunums = Runtime.getRuntime().availableProcessors();//获取当前系统cpu数目 System.out.println(cpunums); ExecutorService ex = Executors.newFixedThreadPool(cpunums); while(true){ // ex.execute(new Handle()); }*/ testcachepool(); } public static void testcachepool(){ System.out.println("Main: Starting at: "+ new Date()); ExecutorService exs = Executors.newCachedThreadPool(); for(int i=0;i<10;i++){ exs.execute(new Handle(String.valueOf(i))); } exs.shutdown();//执行到此处不会马上关闭线程池,但不能向线程池继续添加线程 System.out.println("Main: Finished all threads at"+ new Date()); } } class Handle implements Runnable{ private String name; public Handle(String name) { super(); this.name = "Thread "+name; } public void run() { // TODO Auto-generated method stub System.out.println( name +" Start. Time = "+new Date()); processCommand(); System.out.println( name +" End. Time = "+new Date()); } private void processCommand() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public String toString(){ return this.name; } }
从上面的结果可以看出:
1、主线程的执行与线程池里的线程分开,有可能主线程结束了,但是线程池还在运行
2、放入线程池的线程并不一定会按其放入的先后而顺序执行
相关文章推荐
- java写的简单线程池
- Java中线程池简单构建
- Java 理论与实践: 线程池与工作队列
- 100行Java代码构建一个线程池
- Java中的线程池
- 100行Java代码构建一个线程池
- 100行Java代码构建一个线程池
- [J2SE]JDK5新特性——java.util.concurrent 线程池
- Java 理论与实践: 线程池与工作队列
- 100行Java代码构建一个线程池
- java中线程池的实现【原创】
- 最精简的java 线程池与任务队列,帮助理解概念
- Java代码构建一个线程池
- Java代码构建一个线程池
- 100行Java代码构建一个线程池
- 100行Java代码构建一个线程池 (转载)
- [java]打造阻塞式线程池
- 如何创建Java中的线程池
- java线程池实例
- java写的线程池