使用ExecutorService实现线程池

ExecutorService是java提供的用于管理线程池的类。

线程池的作用:

  - 控制线程数量

  - 重用线程

  当一个程序中创建了许多线程,并在任务结束后销毁,会给系统带来过度消耗资源,以及过度切换线程的危险,从而可能导致系统崩溃。为此我们应使用线程池来解决这个问题。

线程池的概念:

  首先创建一些线程,它们的集合称为线程池,当服务器受到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程,而是将该线程还回到线程池中。

  在线程池编程模式下,任务是提交给整个线程池,而不是交给某个线程,线程池拿到任务就在内部找空闲的线程,再把任务交给内部的空闲线程,一个线程只能执行一个任务,但可以向线程池提交多个任务。

线程池的主要实现方法:

  - Executors.newCachedThreadPool()

  创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们

  - Executors.newFixedThreadPool(int nThreads)

  创建一个可重用固定线程集合的线程池,以共享的无界队列方式来运行这些线程。

  下面以一段代码演示线程池的使用: 

public static void main(String[] args) {
     ExecutorService threadpoo1 = Executors.newFixedThreadPool(2);
     for(int i=0;i<5;i++){
        Runnable runn=new Runnable() {
             public void run() {
                Thread t=Thread.currentThread();
                    try {
                         System.out.println(t+":正在运行");
                         Thread.sleep(5000);
                         System.out.println(t+"运行结束");
                } catch (Exception e) {
                     System.out.println("线程被中断了");
                }
             }
       };
    threadpoo1.execute(runn);
    System.out.println("指派了一个任务交给线程池");
    threadpoo1.shutdown();
    System.out.println("停止线程池了!");
}
时间: 2024-08-10 02:43:27

使用ExecutorService实现线程池的相关文章

JDK 源码解析 —— Executors ExecutorService ThreadPoolExecutor 线程池

零. 简介 Executors 是 Executor.ExecutorService.ThreadFactory.Callable 类的工厂和工具方法. 一. 源码解析 创建一个固定大小的线程池:通过重用共享无界队列里的线程来减少线程创建的开销.当所有的线程都在执行任务,新增的任务将会在队列中等待,直到一个线程空闲.由于在执行前失败导致的线程中断,如果需要继续执行接下去的任务,新的线程会取代它执行.线程池中的线程会一直存在,除非明确地 shutdown 掉. public static Exec

Android(Java)线程池:ExecutorService和Executors使用(一)

ExecutorService是线程池的一个服务,可以随时关闭线程池,是继承Executor的.Executors是个工厂类,专门创建各种线程池. public interface ExecutorService extends Executor { void shutdown(); List<Runnable> shutdownNow(); boolean isShutdown(); boolean isTerminated(); boolean awaitTermination(long

Java并发程序设计(6)线程池之线程数量的控制

1.1. ExecutorService ExecutorService是线程池的接口. Executors是用于创建不同线程池的工具类. 1.2. 线程数量固定的线程池 ExecutorService executorService = Executors.newFixedThreadPool(2); for(int j=0;j<10;j++){ final int t = j; executorService.execute( new Runnable(){ @Override public

Java高新技术—线程池的使用

一. 问题引入 我们知道可以用1.继承Thread类 2.实现runnable接口两种方法创建一个线程,这样实现起来很方便,但是同样出现了一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率, 因为频繁创建线程和销毁线程需要时间. 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果! 二. 线程池简介 ① Jdk1.5之后加入了java.

Android单例线程池

package com.jredu.schooltong.manager; import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; public class ExecutorManager { // 1.私有构造函数,提供静态变量用以存储,提供静态的方法 private ExecutorManager() { init(); } // 静态变量 private static Execut

不惑JAVA之JAVA基础 - 线程池

简单原理 一个比较简单的线程池至少应包含线程池管理器.工作线程.任务队列.任务接口等部分. 线程池管理器(ThreadPool Manager)的作用是创建.销毁并管理线程池,将工作线程放入线程池中: 工作线程是一个可以循环执行任务的线程,在没有任务时进行等待: 任务队列的作用是提供一种缓冲机制,将没有处理的任务放在任务队列中: 任务接口是每个任务必须实现的接口,主要用来规定任务的入口.任务执行完后的收尾工作.任务的执行状态等,工作线程通过该接口调度任务的执行. 线程池的优点 降低资源消耗,通过

并发编程(二):线程池

相比于线程池,我们可能接触new Thread更多一点,既然有了new Thread我们为什么还要使用线程池呢? new Thread的弊端 a.每次new Thread新建对象,性能差 b.线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM(OutOfMemory) c.缺少更多功能,如更多执行.定期执行.线程中断 线程池的优势 a.重用存在的线程,减少对象创建.消亡的开销,性能好 b.可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞

java -&gt;多线程_线程池

线程池概念 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 我们详细的解释一下为什么要使用线程池?(程序优化) 在java中,如果每个请求到达就创建一个新线程,开销是相当大的.在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多.除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源.如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或"

Java线程-- 线程池

1.线程池概念 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 为什么要使用线程池? 在java中,如果每个请求到达就创建一个新线程,开销是相当大的.在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多.除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源.如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不