java线程池详解

来源:互联网 发布:南阳网络推广哪家专业 编辑:程序博客网 时间:2024/05/18 17:58

什么是线程池? 为什么要使用它?
创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)。

如果你只想了解它,知道它是什么和有什么用,再懂一两个最基本的例子就ok,
如果你想深入,后面的文章可以供你很好的学习
1.固定尺寸线程池
import java.util.concurrent.*;
public class ThreadPool{
public static void main(String args[]){
ExecutorService threadPool = Executors.newFixedThreadPool(2);
MyTask t1 = new MyTask(“MT1”);
MyTask t2 = new MyTask(“MT2”);
MyTask t3 = new MyTask(“MT3”);
threadPool.execute(t1);
threadPool.execute(t2);
threadPool.execute(t3);
}
}
class MyTask implements Runnable{
private String tname;
public MyTask(String tname){
this.tname = tname;
}
public void run(){
System.out.println(“\n=========任务”+tname+”开始执行===========”);
for(int i = 0;i<30;i++){
System.out.println(“[“+tname+”_”+i+”]”);
}
System.out.println(“\n=========任务”+tname+”执行结束===========”);
}
}

2.单线程池
只需要实例化一个newSingleThreadExecutor,其他部分使用与上面的代码相同。
import java.util.concurrent.*;
public class ThreadPool{
public static void main(String args[]){
ExecutorService threadPool = Executors.newSingleThreadExecutor();
MyTask t1 = new MyTask(“MT1”);
MyTask t2 = new MyTask(“MT2”);
MyTask t3 = new MyTask(“MT3”);
threadPool.execute(t1);
threadPool.execute(t2);
threadPool.execute(t3);
}
}
class MyTask implements Runnable{
private String tname;
public MyTask(String tname){
this.tname = tname;
}
public void run(){
System.out.println(“\n=========任务”+tname+”开始执行===========”);
for(int i = 0;i<30;i++){
System.out.println(“[“+tname+”_”+i+”]”);
}
System.out.println(“\n=========任务”+tname+”执行结束===========”);
}
}

http://blog.csdn.net/it_man/article/details/7193727
http://www.cnblogs.com/exe19/p/5359885.html

0 0
原创粉丝点击