黑马程序员技术交流社区
标题:
线程池
[打印本页]
作者:
穆帆
时间:
2015-9-26 21:03
标题:
线程池
/*
* 线程池:
*
* 1.当使用继承Thread的方式实现线程,如果想反复的使用此线程,不能多次调用start();
* 可以多次实例化此类的对象,然后再启动线程。
* 2.如果线程的启动,或者构造比较耗时,那么就大大的影响效率;
* 3.JDK5之后,提供了一个"线程池",这个"线程池"可以缓存一些"线程对象",
* 如果需要再次使用时,无需重复构造,直接从"池"中取出线程对象使用即可;
* 4.JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法
public static ExecutorService newCachedThreadPool():创建一个可根据需要创建新线程的线程池
public static ExecutorService newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池
public static ExecutorService newSingleThreadExecutor():创建一个使用单个 worker 线程的 Executor
ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法
Future<?> submit(Runnable task)
<T> Future<T> submit(Callable<T> task)
*/
public class Demo {
public static void main(String[] args) {
/*MyThread t1 = new MyThread();//需要5秒
t1.start();
System.out.println("主进程等待2秒......");
try {
Thread.sleep(1000 * 2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("再次启动MyThread");
t1 = new MyThread();//再次需要5秒
t1.start();*/
//获取一个"线程池"对象
ExecutorService service = Executors.newFixedThreadPool(2);
MyThread t3 = new MyThread();//需要5秒
//执行线程t3
service.submit(t3);
System.out.println("主进程休息2秒钟......");
try {
Thread.sleep(1000 * 2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主进程再次启动线程......");
service.submit(t3);//无需再次构造
//将线程池停止
service.shutdown();
}
}
package cn.itcast.demo05_线程池;
public class MyThread extends Thread{
public MyThread(){
System.out.println("实例化一个我的对象,很耗时哟,需要5秒钟......");
for(int i = 0;i < 5 ; i++){
System.out.println(i + 1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
System.out.println("线程打印:run()......");
}
}
复制代码
作者:
super_qilin
时间:
2015-9-26 21:14
总结的不错啊
作者:
达达达
时间:
2015-9-26 21:47
看起来好复杂,不过学到了,谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2