A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 穆帆 中级黑马   /  2015-9-26 21:03  /  298 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. /*
  2. * 线程池:
  3. *
  4. * 1.当使用继承Thread的方式实现线程,如果想反复的使用此线程,不能多次调用start();
  5. *   可以多次实例化此类的对象,然后再启动线程。
  6. * 2.如果线程的启动,或者构造比较耗时,那么就大大的影响效率;
  7. * 3.JDK5之后,提供了一个"线程池",这个"线程池"可以缓存一些"线程对象",
  8. *   如果需要再次使用时,无需重复构造,直接从"池"中取出线程对象使用即可;
  9. * 4.JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法
  10.                 public static ExecutorService newCachedThreadPool():创建一个可根据需要创建新线程的线程池
  11.                 public static ExecutorService newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池
  12.                 public static ExecutorService newSingleThreadExecutor():创建一个使用单个 worker 线程的 Executor
  13.          ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法
  14.                 Future<?> submit(Runnable task)
  15.                 <T> Future<T> submit(Callable<T> task)

  16. */
  17. public class Demo {
  18.         public static void main(String[] args) {
  19.                 /*MyThread t1 = new MyThread();//需要5秒
  20.                 t1.start();
  21.                
  22.                 System.out.println("主进程等待2秒......");
  23.                 try {
  24.                         Thread.sleep(1000 * 2);
  25.                 } catch (InterruptedException e) {
  26.                         e.printStackTrace();
  27.                 }
  28.                
  29.                 System.out.println("再次启动MyThread");
  30.                 t1 = new MyThread();//再次需要5秒
  31.                 t1.start();*/
  32.                
  33.                 //获取一个"线程池"对象
  34.                 ExecutorService service = Executors.newFixedThreadPool(2);
  35.                 MyThread t3 = new MyThread();//需要5秒
  36.                 //执行线程t3
  37.                 service.submit(t3);
  38.                
  39.                 System.out.println("主进程休息2秒钟......");
  40.                 try {
  41.                         Thread.sleep(1000 * 2);
  42.                 } catch (InterruptedException e) {
  43.                         e.printStackTrace();
  44.                 }
  45.                 System.out.println("主进程再次启动线程......");
  46.                 service.submit(t3);//无需再次构造
  47.                
  48.                 //将线程池停止
  49.                 service.shutdown();
  50.                
  51.                
  52.         }
  53. }
  54. package cn.itcast.demo05_线程池;

  55. public class MyThread extends Thread{
  56.         public MyThread(){
  57.                 System.out.println("实例化一个我的对象,很耗时哟,需要5秒钟......");
  58.                 for(int i = 0;i < 5 ; i++){
  59.                         System.out.println(i + 1);
  60.                         try {
  61.                                 Thread.sleep(1000);
  62.                         } catch (InterruptedException e) {
  63.                                 e.printStackTrace();
  64.                         }
  65.                 }
  66.         }
  67.         @Override
  68.         public void run() {
  69.                 System.out.println("线程打印:run()......");
  70.         }
  71. }
复制代码

2 个回复

倒序浏览
总结的不错啊
回复 使用道具 举报
看起来好复杂,不过学到了,谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马