`
gaoyuntao2005
  • 浏览: 311130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Executors

阅读更多

1. 类 Executors 
此类中提供的一些方法有: 
1.1 public static ExecutorService newCachedThreadPool() 
创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。 

1.2 public static ExecutorService newFixedThreadPool(int nThreads) 
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。 

1.3 public static ExecutorService newSingleThreadExecutor() 
创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。 

这三个方法都可以配合接口ThreadFactory的实例一起使用。并且返回一个ExecutorService接口的实例。 
2. 接口 ThreadFactory 
根据需要创建新线程的对象。使用线程工厂就无需再手工编写对 new Thread 的调用了,从而允许应用程序使用特殊的线程子类、属性等等。 
此接口最简单的实现就是: 

Java代码  收藏代码
  1. class SimpleThreadFactory implements ThreadFactory {  
  2.    public Thread newThread(Runnable r) {  
  3.      return new Thread(r);  
  4.    }  
  5.  }  

3. 接口ExecutorService 
该接口提供了管理终止的方法。 
4.创建标准线程池启动线程 
4.1 提供一个简单的实现Runnable接口的线程 
MyThread.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors;  
  2.    
  3. public class MyThread implements Runnable {  
  4.     private int count = 1, number;  
  5.    
  6.     public MyThread(int num) {  
  7.        number = num;  
  8.        System.out.println("Create Thread-" + number);  
  9.     }  
  10.    
  11.     public void run() {  
  12.        while (true) {  
  13.            System.out.println("Thread-" + number + " run " + count+" time(s)");  
  14.            if (++count == 3)  
  15.               return;  
  16.        }  
  17.     }  
  18. }  

这个线程会打印出相应的创建和执行信息。 

4.2使用CachedThreadPool启动线程 
CachedThreadPool.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors;  
  2. import java.util.concurrent.ExecutorService;  
  3. import java.util.concurrent.Executors;  
  4.    
  5. public class CachedThreadPool {  
  6.     public static void main(String[] args) {  
  7.        ExecutorService exec = Executors.newCachedThreadPool();  
  8.        for (int i = 0; i < 5; i++)  
  9.            exec.execute(new MyThread(i));  
  10.        exec.shutdown();  
  11.     }  
  12. }  

结果: 
Create Thread-0 
Create Thread-1 
Create Thread-2 
Create Thread-3 
Thread-0 run 1 time(s) 
Thread-0 run 2 time(s) 
Thread-1 run 1 time(s) 
Thread-1 run 2 time(s) 
Thread-2 run 1 time(s) 
Thread-2 run 2 time(s) 
Create Thread-4 
Thread-4 run 1 time(s) 
Thread-4 run 2 time(s) 
Thread-3 run 1 time(s) 
Thread-3 run 2 time(s) 

4.3 使用FixedThreadPool启动线程 
FixedThreadPool.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors;  
  2. import java.util.concurrent.ExecutorService;  
  3. import java.util.concurrent.Executors;  
  4.    
  5. public class FixedThreadPool {  
  6.     public static void main(String[] args) {  
  7.        ExecutorService exec = Executors.newFixedThreadPool(2);  
  8.        for (int i = 0; i < 5; i++)  
  9.            exec.execute(new MyThread(i));  
  10.        exec.shutdown();  
  11.     }  
  12. }  

结果: 
Create Thread-0 
Create Thread-1 
Create Thread-2 
Create Thread-3 
Create Thread-4 
Thread-0 run 1 time(s) 
Thread-0 run 2 time(s) 
Thread-2 run 1 time(s) 
Thread-2 run 2 time(s) 
Thread-3 run 1 time(s) 
Thread-3 run 2 time(s) 
Thread-4 run 1 time(s) 
Thread-4 run 2 time(s) 
Thread-1 run 1 time(s) 
Thread-1 run 2 time(s) 

4.4 使用SingleThreadExecutor启动线程 
SingleThreadExecutor.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors;  
  2. import java.util.concurrent.ExecutorService;  
  3. import java.util.concurrent.Executors;  
  4.    
  5. public class SingleThreadExecutor {  
  6.     public static void main(String[] args) {  
  7.        ExecutorService exec = Executors.newSingleThreadExecutor();  
  8.        for (int i = 0; i < 5; i++)  
  9.            exec.execute(new MyThread(i));  
  10.        exec.shutdown();  
  11.     }  
  12. }  

结果: 
Create Thread-0 
Create Thread-1 
Create Thread-2 
Create Thread-3 
Create Thread-4 
Thread-0 run 1 time(s) 
Thread-0 run 2 time(s) 
Thread-1 run 1 time(s) 
Thread-1 run 2 time(s) 
Thread-2 run 1 time(s) 
Thread-2 run 2 time(s) 
Thread-3 run 1 time(s) 
Thread-3 run 2 time(s) 
Thread-4 run 1 time(s) 
Thread-4 run 2 time(s) 
5.配合ThreadFactory接口的使用 
我们试图给线程加入daemon和priority的属性设置。 
5.1设置后台线程属性 
DaemonThreadFactory.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors.factory;  
  2. import java.util.concurrent.ThreadFactory;  
  3.    
  4. public class DaemonThreadFactory implements ThreadFactory {  
  5.     public Thread newThread(Runnable r) {  
  6.        Thread t = new Thread(r);  
  7.        t.setDaemon(true);  
  8.        return t;  
  9.     }  
  10. }  


5.2 设置优先级属性 
最高优先级MaxPriorityThreadFactory.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors.factory;  
  2. import java.util.concurrent.ThreadFactory;  
  3.    
  4. public class MaxPriorityThreadFactory implements ThreadFactory {  
  5.     public Thread newThread(Runnable r) {  
  6.        Thread t = new Thread(r);  
  7.        t.setPriority(Thread.MAX_PRIORITY);  
  8.        return t;  
  9.     }  
  10. }  

最低优先级MinPriorityThreadFactory.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors.factory;  
  2. import java.util.concurrent.ThreadFactory;  
  3.    
  4. public class MinPriorityThreadFactory implements ThreadFactory {  
  5.     public Thread newThread(Runnable r) {  
  6.        Thread t = new Thread(r);  
  7.        t.setPriority(Thread.MIN_PRIORITY);  
  8.        return t;  
  9.     }  
  10. }  


5.3启动带有属性设置的线程 
ExecFromFactory.java 
Java代码  收藏代码
  1. package com.zj.concurrency.executors;  
  2. import java.util.concurrent.ExecutorService;  
  3. import java.util.concurrent.Executors;  
  4. import com.zj.concurrency.executors.factory.DaemonThreadFactory;  
  5. import com.zj.concurrency.executors.factory.MaxPriorityThreadFactory;  
  6. import com.zj.concurrency.executors.factory.MinPriorityThreadFactory;  
  7.    
  8. public class ExecFromFactory {  
  9.     public static void main(String[] args) throws Exception {  
  10.        ExecutorService defaultExec = Executors.newCachedThreadPool();  
  11.        ExecutorService daemonExec = Executors  
  12.               .newCachedThreadPool(new DaemonThreadFactory());  
  13.        ExecutorService maxPriorityExec = Executors  
  14.               .newCachedThreadPool(new MaxPriorityThreadFactory());  
  15.        ExecutorService minPriorityExec = Executors  
  16.               .newCachedThreadPool(new MinPriorityThreadFactory());  
  17. font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-r
    分享到:
    评论

相关推荐

    Java中Executors类中几种创建各类型线程池

    Java中Executors类中几种创建各类型线程池方法及简单实例

    Executor,Executors,ExecutorService比较.docx

    【Executor、Executors和ExecutorService详解】 在Java并发编程中,`Executor`、`Executors`和`ExecutorService`是核心组件,它们帮助开发者高效管理线程资源,提高程序的并发性能。理解这三个概念的区别和用途是...

    Java多线程Executors批量执行数据实现限流

    java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程...

    线程池 Executors

    Java中的线程池Executors java中的线程池Executors是Java并发编程中的一种重要概念,它提供了一种高效、灵活的线程管理机制。使用线程池可以降低资源消耗,提高响应速度,提高线程的可管理性。 线程池的优点 1. ...

    Executors 使用实例

    java Executors 使用实例 concurrent.ExecutorService

    顶层接口Executors详解

    顶层接口Executors详解 Executors框架是Java语言中用于异步执行任务的高级接口,旨在提供一个高效、灵活、可扩展的任务执行机制。该框架提供了一个两级调度模型,第一级是用户级的调度器,第二级是操作系统内核的...

    5_Executors源码阅读1

    《深入解析Java Executors源码》 在Java多线程编程中,`java.util.concurrent.Executors`类扮演着至关重要的角色。它提供了一系列静态工厂方法,用于创建和管理线程池,以及与之相关的ExecutorService、...

    java 线程池管理类:Executors_.docx

    ### Java线程池管理类:Executors_ #### 概述 `java.util.concurrent.Executors` 是Java并发编程中一个非常重要的工具类,主要用于创建不同类型的线程池对象。通过使用`Executors`类,开发者可以方便地管理和控制...

    C++ library for executors.zip

    标题 "C++ library for executors.zip" 暗示了一个关于C++编程的库,它专注于执行器(executors)的概念。执行器是C++并发编程中的一个重要组件,它们负责调度和执行任务,有助于管理线程和资源。在这个库中,可能...

    PyPI 官网下载 | more_executors-2.5.1-py2.py3-none-any.whl

    《PyPI官网下载 | more_executors-2.5.1-py2.py3-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是最重要的资源库,它为全球的开发者提供了一个集中地来发布、分享和安装Python软件包。这个资源...

    Java并发编程中使用Executors类创建和管理线程的

    Java提供了一套强大的并发工具,其中`java.util.concurrent.Executors`类是核心部分,它允许我们创建和管理线程池,极大地简化了并发编程。本篇将深入探讨`Executors`类的使用方法及其背后的并发原理。 `Executors`...

    PyPI 官网下载 | more_executors-1.1.0-py2.py3-none-any.whl

    《PyPI官网下载:more_executors-1.1.0-py2.py3-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是官方的第三方库仓库,它为开发者提供了一个集中地来发布、搜索和下载Python软件包。本资源“more_...

    java并发编程:Executor、Executors、ExecutorService.docx

    Java并发编程中的Executor、Executors和ExecutorService是Java并发编程框架的重要组成部分,它们为开发者提供了高效管理和控制线程执行的工具。以下是对这些概念的详细解释: 1. Executor: Executor是一个接口,它...

    线程池实例:使用Executors和ThreadPoolExecutor

    NULL 博文链接:https://bijian1013.iteye.com/blog/2284676

    java 中Executor, ExecutorService 和 Executors 间的不同

    Java 中 Executor, ExecutorService 和 Executors 的不同 Java 中的 Executor, ExecutorService 和 Executors 是 Java Executor 框架的重要组件,用于提供线程池的功能。在 Java 1.5 之后,Executor 框架提供了多种...

    Java并发编程中使用Executors类创建和管理线程的用法

    Java并发编程中,`java.util.concurrent.Executors` 类是一个至关重要的工具类,它提供了一系列静态方法,用于创建和管理线程池以及相关的线程执行服务。`Executors` 类简化了线程池的创建和线程的调度,使得开发者...

    Java中的Executors类最全讲义

    Executors类的基本用法 2.1 创建线程池 2.2 提交任务 2.3 关闭线程池 线程池的分类 3.1 FixedThreadPool 3.2 CachedThreadPool 3.3 ScheduledThreadPool 3.4 SingleThreadExecutor 3.5 WorkStealingPool 线程池的...

    验证阿里巴巴禁用Executors的原因

    【强制】线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors返回的线程池对象的弊端如下: 1) ...

    Python库 | more-executors-1.19.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:more-executors-1.19.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics