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

Java中的多线程学习三:线程池

    博客分类:
  • Java
阅读更多

可以使用线程池对其进行管理,同时线程池还具有提高系统性能的优点,因为创建线程和清除线程的开销比较大。

 

有两种不同类型的线程池:一是固定线程数量的线程池;二是可变数量的线程池。

 

对于固定数量的线程池,可以使用Executors的静态方法 newFixedThreadPool 来创建 ExecutorService;或者利用 newSingleThreadPool来创建。

 

而 ExecutorService 实现了 Executor 接口,这个接口中有一个方法:Execute(Runnable command),也就是执行线程。

 

对于固定数量的线程池而言,如果需要执行的线程数量多于构造的数量,那么只能并发构造时的数量,剩下的线程就进入线程池的等待队列。

 

如果不需要使用该线程池了,则使用 ExecutorService 中的 shutDown 方法,此时,该线程池就不会接受执行新的线程任务了。

 

 

 

对于可变数量的线程池,可用Executors的静态方法 newCachedThreadPool 来创建 ExecutorService,该线程池的大小是不定的,当执行任务时,会先选取缓存中的空闲线程来执行,如果没有空闲线程,则创建一个新的线程,而如果空闲线程的空闲状态超过60秒,则线程池删除该线程。

 

 

还有一种线程池:延迟线程池

 

该线程池的创建有两个方法: Executors.newScheduledThreadPool(int corePoolSize);

                                        Executors.newSingleScheduledExecutor();

 

创建之后,会获得一个 ScheduledExecutorService。

 

该对象的一个重要的方法就是: schedule(Runnable command, long delay, TimeUnit unit)

 

该方法返回了一个 ScheduledFuture(下面再讲)。

 

 

 

另外,如果要创建一个自定义的线程池,还可以使用ThreadPoolExecutor这个类,主要的构造方法如下:

 

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,

                                 BlockingQueue<Runnable> wordQueue)

 

其中各参数的意义:

  1. int corePoolSzie: 定义线程池的标准线程数量
  2. int maximumPoolSize: 定义线程池的最大线程数量
  3. long keepAliveTime: 定义空闲线程的存活时间
  4. TimeUnit unit: 存活时间的单位
  5. BlockingQueue<Runnable> WordQueue: 线程等待的队列

 

 

 

现在总结一下Callable和Future两个接口

 

Callable接口和Runnable接口相似,区别就是Callable需要实现call方法,而Runnable需要实现run方法;并且,call方法还可以返回任何对象,无论是什么对象,JVM都会当作Object来处理。但是如果使用了泛型,我们就不用每次都对Object进行转换了。

 

 

Future接口,一般都是取回Callable执行的状态用的。其中的主要方法:

  • cancel,取消Callable的执行,当Callable还没有完成时
  • get,获得Callable的返回值
  • isCanceled,判断是否取消了
  • isDone,判断是否完成

 

这上面,就是对线程池的大致总结。

 

4
1
分享到:
评论
1 楼 56071925 2009-01-20  
听者有心 菜鸟学java 每一天都要进步 我也一样,不过有时心丢了又要捡回来

相关推荐

    Java多线程+线程池.docx

    Java 多线程是指在 Java 编程语言中,一个线程的动态执行过程。这个过程包括线程的创建、执行和销毁三个阶段。在 Java 中,创建线程有多种方式,包括通过实现 Runnable 接口、继承 Thread 类本身、通过 Callable 和 ...

    Java中多线程的使用线程池.docx

    Java中的线程池是多线程编程中一种高效、可管理的执行机制。它通过预先创建并维护一组线程,避免了频繁地创建和销毁线程带来的开销,从而提高了程序的性能和响应速度。线程池的核心概念包括以下几个方面: 1. **...

    线程池管理多线程上传

    线程池管理和多线程上传是并发编程中的一个重要实践,特别是在大数据传输和网络服务中。在Java等编程语言中,线程池通过有效地管理和复用线程资源,避免了频繁创建和销毁线程带来的开销,提升了系统性能。下面将详细...

    java多线程、并发及线程池介绍收藏的几篇文档

    Java多线程、并发以及线程池是Java编程中至关重要的概念,特别是在处理高并发、高性能的系统设计时。以下是对这些主题的详细说明: 1. **Java 程序中的多线程** - 多线程允许一个程序同时执行多个任务,提高程序...

    线程池详解:线程池七大核心参数、线程池工作原理、线程池的创建方式、线程池的拒绝策略、如何合理分配线程池大小

    线程池是Java多线程编程中的重要概念,它是一种管理线程的机制,通过池化技术有效地管理和控制线程的生命周期,以提高系统资源的利用率和系统性能。本篇文章将深入探讨线程池的七大核心参数、工作原理、创建方式、...

    Java_多线程编程线程:大总结

    ### Java多线程编程大总结 #### 一、Java多线程编程的演进与重要性 Java多线程编程自Java 5之后经历了显著的革新与扩展,引入了强大的并发包,极大地增强了多线程编程的能力。在Java 5之前,多线程的支持较为薄弱...

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

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

    JAVA使用线程池查询大批量数据

    线程池是一种多线程处理形式,预先创建了若干个线程,当有任务需要执行时,会从线程池中取出一个线程来执行任务,任务执行完毕后,线程返回线程池中等待新的任务。这种机制避免了频繁创建和销毁线程带来的性能开销,...

    java多线程查询数据库

    综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。

    Java中的线程与线程池.pptx

    Java提供了Executors工具类来创建不同类型的线程池: 1. newCachedThreadPool:创建一个可缓存线程池,线程空闲超过指定时间后会被回收,当线程池为空时,会新建线程来处理任务。 2. newSingleThreadExecutor:创建...

    Java 线程池的原理与实现

    Java线程池是一种高级的多线程处理框架,它是Java并发编程中非常重要的一个组件。线程池的原理和实现涉及到操作系统调度、内存管理和并发控制等多个方面。理解线程池的工作原理有助于优化程序性能,避免过度创建和...

    Java8并行流中自定义线程池操作示例

    这些流可以提高执行性能,以牺牲多线程的开销为代价。在这篇短文中,我们将看一下 Stream API的最大限制,同时看一下如何让并行流和线程池实例(ThreadPool instance)一起工作。 知识点:Java8引入了流的概念,流是...

    java_thread_cn.rar_Java 线程池_java thread books_java线程_线程池_线程池调度

    Java线程池是Java并发编程中的重要组成部分,它在多线程编程中扮演着至关重要的角色,有效地管理和调度了大量的并发任务。线程池通过预先创建并维护一组可重用线程,来提升程序的性能和效率,避免了频繁地创建和销毁...

    Java实现通用线程池

    Java 实现通用线程池是指使用 Java 语言编写一个通用的线程池,线程池通俗的描述就是预先创建若干空闲线程,等到需要用多线程去处理事务的时候去唤醒某些空闲线程执行处理任务,这样就省去了频繁创建线程的时间,...

    java多线程分页查询

    ### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...

    深入理解-Java-多线程核心知识:跳槽面试必备.docx

    ### 深入理解Java多线程核心知识:跳槽面试必备 #### 一、引言 多线程是Java编程中的一个重要概念,对于提升软件性能、优化用户体验有着不可或缺的作用。然而,多线程的学习门槛相对较高,如果不正确地理解和使用...

    基于线程池的Java多线程应用技术.pdf

    线程池技术是Java多线程机制中的一个重要组成部分,它能够有效地满足同类的、独立的、基于网络的典型服务器应用的效率需求。线程池技术通过控制最大并发数,调节系统访问流量,避免系统资源出现瓶颈。 线程池的创建...

    1.Java分布式与微服务实战\多线程与分布式\第1节 线程池

    线程池是Java中的一种重要的多线程机制,用于管理和控制线程的创建、运行和销毁。线程池的出现可以解决多线程带来的问题,例如反复创建和销毁线程所带来的开销问题。 线程池的重要性体现在以下几个方面: 1. 加快...

    java+socket 及多线程线程池应用(IBM教程)

    在这个“java+socket 及多线程线程池应用”的教程中,我们可以期待学习到以下核心知识点: 1. **Socket基础**:首先会讲解Socket的基本概念,包括服务器端Socket和客户端Socket的工作原理,以及TCP/IP协议在Socket...

    java多线程程序设计:Java NIO+多线程实现聊天室

    java多线程程序设计:Java NIO+多线程实现聊天室 Java基于多线程和NIO实现聊天室 涉及到的技术点 线程池ThreadPoolExecutor 阻塞队列BlockingQueue,生产者消费者模式 Selector Channel ByteBuffer ProtoStuff 高...

Global site tag (gtag.js) - Google Analytics