java多线程之 Executors线程池管理
来源:互联网 发布:js 一分钟倒计时代码 编辑:程序博客网 时间:2024/05/17 04:46
1. 类 Executors
此类中提供的一些方法有:
1.1 public static ExecutorService newCachedThreadPool()
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。
1.2 public static ExecutorService newFixedThreadPool(int nThreads)
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
1.3 public static ExecutorService newSingleThreadExecutor()
创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
这三个方法都可以配合接口ThreadFactory的实例一起使用。并且返回一个ExecutorService接口的实例。
2. 接口 ThreadFactory
根据需要创建新线程的对象。使用线程工厂就无需再手工编写对 new Thread 的调用了,从而允许应用程序使用特殊的线程子类、属性等等。
此接口最简单的实现就是:
class SimpleThreadFactory implements ThreadFactory {
public Thread newThread(Runnable r) {
return new Thread(r);
}
}
3. 接口ExecutorService
该接口提供了管理终止的方法。
4.测试用例:
4.1固定大小线程:
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * * @author hxm * */ public class TestThread { public static void main(String args[]){ //创建一个可重用固定线程数的线程池 ExecutorService pool = Executors.newFixedThreadPool(4); //创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。 // ExecutorService pool = Executors.newSingleThreadExecutor(); //创建实现了runnable接口的对象 Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); //关闭线程池 pool.shutdown(); } } class MyThread extends Thread{ @Override public void run(){ System.out.println(Thread.currentThread().getName()+" is running..."); } }
4.2单任务线程:
package cn.itcast.heima2;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class ThreadPoolTest { /** * @param args */ public static void main(String[] args) { //创建一个线程池// ExecutorService threadPool = Executors.newFixedThreadPool(3);//创建3个线程// ExecutorService threadPool = Executors.newCachedThreadPool(); ExecutorService threadPool = Executors.newSingleThreadExecutor(); for(int i=1;i<=10;i++){ final int task = i; //往线程池里面添加任务 threadPool.execute(new Runnable(){ @Override public void run() { for(int j=1;j<=10;j++){ try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " is looping of " + j + " for task of " + task); } } }); } System.out.println("all of 10 tasks have committed! "); //定时器 Executors.newScheduledThreadPool(3).scheduleAtFixedRate( new Runnable(){ @Override public void run() { System.out.println("bombing!"); }}, 6, 2, TimeUnit.SECONDS); }}
4.3 单任务延迟线程:
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * * @author hxm * */public class TestThread { public static void main(String args[]){ //创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行 ScheduledExecutorService pool = Executors.newSingleThreadScheduledExecutor(); //创建实现了runnable接口的对象 Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); //使用延迟执行风格的方法 pool.schedule(t4, 10, TimeUnit.MILLISECONDS); pool.schedule(t5, 10, TimeUnit.MILLISECONDS); //关闭线程池 pool.shutdown(); }} class MyThread extends Thread{ @Override public void run(){ System.out.println(Thread.currentThread().getName()+" is running..."); } }
4.4 自定义线程池:
import java.util.concurrent.ArrayBlockingQueue; 2 import java.util.concurrent.BlockingQueue; 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 import java.util.concurrent.ScheduledExecutorService; 6 import java.util.concurrent.ThreadPoolExecutor; 7 import java.util.concurrent.TimeUnit; 8 9 /**10 * 11 * @author hxm12 *13 */14 public class TestThread {15 public static void main(String args[]){16 //创建等待队列 17 BlockingQueue<Runnable> bqueue = new ArrayBlockingQueue<Runnable>(20); 18 //创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。 19 ThreadPoolExecutor pool = new ThreadPoolExecutor(2,3,2,TimeUnit.MILLISECONDS,bqueue); 20 21 //创建实现了runnable接口的对象22 Thread t1 = new MyThread();23 Thread t2 = new MyThread();24 Thread t3 = new MyThread();25 Thread t4 = new MyThread();26 Thread t5 = new MyThread();27 //将线程放入池中进行执行28 pool.execute(t1);29 pool.execute(t2);30 pool.execute(t3);31 pool.execute(t4);32 pool.execute(t5);33 //关闭线程池34 pool.shutdown();35 }36 }37 class MyThread extends Thread{38 39 @Override40 public void run(){41 System.out.println(Thread.currentThread().getName()+" is running...");42 try { 43 Thread.sleep(100L); 44 } catch (InterruptedException e) { 45 e.printStackTrace(); 46 } 47 }48 }
0 0
- java多线程之 Executors线程池管理
- Java多线程-线程池Executors
- java多线程(1)---Executors线程池
- java 线程之executors线程池
- 多线程Java:使用Executors创建和管理线程
- Java并发之线程池Executors(二)
- Java 多线程编程之九:使用 Executors 和 ThreadPoolExecutor 实现的 Java 线程池的例子
- Java 多线程编程之九:使用 Executors 和 ThreadPoolExecutor 实现的 Java 线程池
- Java 多线程编程之九:使用 Executors 和 ThreadPoolExecutor 实现的 Java 线程池的例子
- Java Executors(线程池)
- java Executors(线程池)
- Java Executors(线程池)
- Java Executors(线程池)
- Executors线程池--java
- Java Executors(线程池)
- java Executors线程池
- Java线程池Executors
- Java Executors(线程池)
- javascript常用的小知识
- JavaIO之RandomAccessFile随机访问文件
- Java多线程之 ThreadLocal
- java多线程之synchronized(线程同步)
- Log4Net快速使用教程
- java多线程之 Executors线程池管理
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- java多线程之Lock线程同步
- Flex之自定义事件
- Java自带webservice
- webservice注释
- JAVA6学习webservice
- datagrid和combobox简单应用
- WebService调用一对多关联关系时出现 死循环:A cycle is detected in...