首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java线程(4) 线程池

2012-08-25 
java线程(四) 线程池1. 原理:? ? ? ??线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众

java线程(四) 线程池

1. 原理:

? ? ? ??线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源?,类似于数据库连接池等。从系统资源的角度看,在一个 JVM 里创建太多的线程可能会导致系统由于过度消耗内存而用完内存或“切换过度”?,?线程池就可以用于限制任何给定时刻处理的请求数目,避免创建过多的线程导致系统崩溃。?
2. 线程池的种类:

固定大小的线程池:创建固定线程数量的线程池,如果任务数大于线程池中线程的数量,那么任务将等待

单任务线程池:创建一个线程的线程池,相当于单线程串行执行所有任务。

可变尺寸的线程池?:根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们

定时器线程池:指定线程池中线程在多长时间后执行,以及每个多长时间执行一次

3.示例代码:

?

代码1:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author lcy *  *2012-5-22 */public class Test {         public static void main(String[] args) {                 //创建一个可重用固定线程数的线程池               //  ExecutorService pool = Executors.newFixedThreadPool(2);            //单任务线程池               // ExecutorService pool = Executors.newSingleThreadExecutor();                                 //创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。                 ExecutorService pool = Executors.newCachedThreadPool();                            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()+"正在执行。。。");         } }
 
  1. import?java.util.concurrent.Executors;??
  2. import?java.util.concurrent.ScheduledExecutorService;??
  3. import?java.util.concurrent.TimeUnit;??
  4. ??
  5. /**?
  6. ?*?@author?lcy?
  7. ?*??
  8. ?*2012-5-22?
  9. ?*/??
  10. public?class?Test2?{???
  11. ????public?static?void?main(String[]?args)?{???
  12. ????????????//创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。???
  13. ????????????ScheduledExecutorService?pool?=?Executors.newScheduledThreadPool(3);???
  14. ????????????//创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口???
  15. ????????????Thread?t1?=?new?MyThread();???
  16. ????????????Thread?t2?=?new?MyThread();???
  17. ????????????Thread?t3?=?new?MyThread();???
  18. ????????????Thread?t4?=?new?MyThread();???
  19. ????????????Thread?t5?=?new?MyThread();???
  20. ????????????//将线程放入池中进行执行???
  21. ????????????pool.execute(t1);???
  22. ????????????pool.execute(t2);???
  23. ????????????pool.execute(t3);???
  24. ????????????//? 针对哪个线程进行定时,时间长度,时间单位
  25. ????????????pool.schedule(t4,?10,?TimeUnit.MILLISECONDS);???
  26. ????????????pool.schedule(t5,?10,?TimeUnit.MILLISECONDS);???
  27. ????????????//关闭线程池???
  28. ????????????pool.shutdown();???
  29. ????}???
  30. }???
  31. ??
  32. class?MyThread2?extends?Thread?{???
  33. ????@Override???
  34. ????public?void?run()?{???
  35. ????????????System.out.println(Thread.currentThread().getName()?+?"正在执行。。。");???
  36. ????}???
  37. }

热点排行