线程池

  • 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。

    • 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,就等待下一个对象来使用。
  • 在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池。

  • JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法:
  • public static ExecutorService newCachedThreadPool ()
  • public static ExecutorSerivce newFixedThreadPool (int nThreads )
  • public static ExecutorService newSingleThreadExecutor()
  • 这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法:
 Future <?>submit(Runnable task)
 <T> Future<T>submit(Callable<T>task) 

实例:

package test50;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * 线程池的好处:线程池里面的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。
 * 
 * 如何实现线程的代码:
 * 1 创建一个线程池对象,控制要创建几个线程对象。
 *      public static ExecutorService newFixedThreadPool(int nThreads)
 * 2 这种线程池的线程可以执行:
 *          可以执行Runnable对象或者Callable对象代表的线程
 *          做一个类实现Runnable接口
 * 3 调用如下方法即可:
 *      Future<?> submit(Runnable task)
 *      <T> Future<T> submit(Callable<T> task)
 * @author samsung
 *
 */
public class ExecutorsDemo {
    public static void main(String[] args) {
        //创建一个线程池对象,控制要创建几个线程对象。
        ExecutorService pool=Executors.newFixedThreadPool(2);

        //可以执行Runnable对象或者Callable对象代表的线程
        pool.submit(new MyRunnable());
        pool.submit(new MyRunnable());

        //结束线程池  可以关闭 ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭 ExecutorService。
        //shutdown() 方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。
        //在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。
        pool.shutdown();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰河家园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值