关于线程池的问题

第三方89 2013-12-31 09:12:23

import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Test {

public Future<Void> future;

public void test() {
future = Executors.newSingleThreadExecutor().submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
//dosomething
return null;
}
});
try {
future.get();
//dosomething
} catch (Exception e) {
}
}
public static void main(String[] args) {
Test t=new Test();
t.test();
t.test();
t.test();
}
}

如上所示,我多次执行test()方法,线程池的线程能被重用吗?是不是要想重用必须把Executors.newSingleThreadExecutor()赋值给一个字段然后调用这个字段?
线程池的线程重用是怎么回事?线程只能执行一次并不能重复执行啊。
另外,Executors的几个方法,newCachedThreadPool()、newCachedThreadPool(ThreadFactory threadFactory)、newFixedThreadPool(int nThreads)、newScheduledThreadPool(int corePoolSize)创建的线程池有什么区别?我都不知道使用哪个去创建线程池!
...全文
201 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fearlessMore 2014-01-03
  • 打赏
  • 举报
回复
引用 楼主 u013093402 的回复:

import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Test {

    public Future<Void> future;

    public void test() {
        future = Executors.newSingleThreadExecutor().submit(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                //dosomething 
                return null;
            }
        });
        try {
            future.get();
            //dosomething 
        } catch (Exception e) {
        }
    }
    public static void main(String[] args) {
        Test t=new Test();
        t.test();
        t.test();
        t.test();
    }
}
如上所示,我多次执行test()方法,线程池的线程能被重用吗?是不是要想重用必须把Executors.newSingleThreadExecutor()赋值给一个字段然后调用这个字段? 线程池的线程重用是怎么回事?线程只能执行一次并不能重复执行啊。 另外,Executors的几个方法,newCachedThreadPool()、newCachedThreadPool(ThreadFactory threadFactory)、newFixedThreadPool(int nThreads)、newScheduledThreadPool(int corePoolSize)创建的线程池有什么区别?我都不知道使用哪个去创建线程池!
楼主多实践编程就行了,每个都是针对不同应用的,楼主在做项目时遇到具体的再说吧
xiaoliuliu2050 2014-01-03
  • 打赏
  • 举报
回复
newCachedThreadPool()、 创建一个没有边界的线程池 newCachedThreadPool(ThreadFactory threadFactory)、创建一个没有边界的线程池,并且 自己制定线程工厂。 newFixedThreadPool(int nThreads)、、 创建一个固定大小的线程池。 newScheduledThreadPool(int corePoolSize)创建一个计时器 线程池。 可以指定 执行时间。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧