首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java线程学习(八)线程与Executor 框架

一 使用线程的好处 线程提供了一种限制和管理资源(包括执行一个任务)。 每个线程还维护一些基本统计信息,例如已完成任务的数量。...这里借用《Java并发编程的艺术》提到的来说一下使用线程的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。...##二 Executor 框架 2.1 简介 Executor 框架Java5之后引进的,在Java 5之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理...三 ThreadPoolExecutor详解 线程实现类ThreadPoolExecutor是Executor 框架最核心的类,先来看一下这个类中比较重要的四个属性 3.1 ThreadPoolExecutor...六 总结 本节只是简单的介绍了一下使用线程的好处,然后花了大量篇幅介绍Executor 框架

1K40
您找到你想要的搜索结果了吗?
是的
没有找到

Java并发编程(08):Executor线程框架

一、Executor框架简介 1、基础简介 Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的实现类,提供便捷方式来提交任务并且获取任务执行结果,封装了任务执行的过程...3、核心API结构 Executor框架包含的核心接口和主要的实现类如下图所示: ?...范围内的线程空闲时间达到keepAliveTime也将回收; 三、线程应用 应用场景:批量账户和密码的校验任务,在实际的业务中算比较常见的,通过初始化线程,把任务提交执行,最后拿到处理结果,这就是线程使用的核心思想...,通过线程对多个任务线程重复使用,线程创建也被分摊到多个任务上,多数任务提交就有空闲的线程可以使用,所以消除线程频繁创建带来的开销。.../java-base-parent

31430

java如何创建线程_java线程状态

请点击http://www.captainbed.net 1、为什么要用线程线程提供了一种限制和管理资源(包括执行一个任务)。每个线程还维护一些基本统计信息,例如已完成任务的数量。...这里借用《Java并发编程的艺术》,来说一下使用线程的好处: 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。...4、如何创建线程 《阿里巴巴Java开发手册》中强制线程不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程的运行规则...方式二:通过Executor框架的工具类Executors来实现,我们可以创建三种类型的ThreadPoolExecutor。 FixedThreadPool:该方法返回一个固定线程数量的线程。...CachedThreadPool:该方法返回一个可根据实际情况调整线程数量的线程线程线程数量不确定,但若有空闲线程可以复用,则会优先使用可复用的线程

1.1K10

java创建线程代码_java手写线程

, 当提交一个任务到线程的时候,线程会创建一个线程来执行任务,即使当前线程已经存在空闲线程,仍然会创建一个线程,等到需要执行的任务数大于线程基本大小时就不再创建。...如果调用线程的prestartAllCoreThreads()方法,线程会提前创建并启动所有的基本线程。...maximumPoolSizeSize 线程最大数量,线程允许创建的最大线程数,如果队列满了,并且已创建的线程数小于最大线程数,则线程会再创建新的线程执行任务。...饱和策略 当队列和线程都满了,说明线程处于饱和的状态,那么必须采取一种策略处理提交的新任务。...addWorker(command, false)) reject(command); } 参考文档 https://docs.oracle.com/javase/8/docs/api/java/util

75130

java线程

线程能够帮助我们提高系统资源利用效率,并简化线程管理。通过并发包下的Executors(不是Executor)可以方便的创建如下几类线程。...newWorkStealingPool(int parallelism),Java 8 才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行地处理任务,不保证处理顺序...首先看看线程框架图: ? 线程框架 应用与线程的交互和线程的内部工作过程如下图所示: ?...内部的“线程”,这是指保持工作线程的集合(是一个HashSet),线程需要在运行过程中管理线程创建、销毁。线程的工作线程被抽象为静态内部类 Worker,基于AQS实现。...如果任务提交时被拒绝,比如线程已经处于 SHUTDOWN 状态或者队列已经满了,需要为其提供处理逻辑,Java 标准库提供了类似ThreadPoolExecutor.AbortPolicy等默认实现,

84520

Java线程

Java线程 一、介绍 线程,顾名思义,这是管理一堆线程而出现的对象。与数据库的连接一致,它的出现解决了线程的频繁创建和销毁,从而浪费大量资源的问题。...所以,线程池中有提前创建好的线程,使用时直接分配获取,使用完再由线程管理是否销毁。...优点 降低资源消耗,也就是不需要重复多次的创建线程 更好的管理线程 比如可以获取当前运行的线程是什么 还在等待执行的任务有什么 二、使用线程 在JDK5起提供了线程的对象,ExecutorService...和Executors 其中,ExecutorService和它的子类ThreadPoolExecutor是线程的关键 而Executors是对应的工具类,里面有些工厂方法可以快速创建线程 查看ThreadPoolExecutor...当线程所有的线程都繁忙运行时,新添加的执行任务会暂时保留至此队列 threadFactory 创建线程线程工厂 handler 拒绝策略。

51120

Java线程

概述:         线程,从字面含义来看是管理同一组同构工作线程的资源。...线程与工作队列是密切相关的, 工作队列保存了所有等待执行的任务, 工作线程从工作队列中获取任务并执行。         通过重用线程而不是创建线程的方式, 这样做的好处是: ①....它会创建一个固定长度的线程, 每提交一个任务就会创建一个线程,直到达到最大线程数为止。...这时候线程的规模就不会变化,需要注意的是当某个线程因发生了未预期的Exception而终止,这时候线程会补充一个新的线程。     ②. newCachedThreadPool。...它将创建一个可缓存的线程,当线程的规模大于当前需要处理的任务时会进行回收空闲的线程, 当任务增加时会动态增加线程数,  线程的规模不受限制。

80060

java线程

(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机);   Java里面线程的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程,而只是一个执行线程的工具...要配置一个线程是比较复杂的,尤其是对于线程的原理不是很清楚的情况下,很有可能配置的线程不是较优的,因此在Executors类里面提供了一些静态工厂,生成一些常用的线程。...每次提交一个任务就创建一个线程,直到线程达到线程的最大值。线程的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程会补充一个新线程。...此线程不会对线程大小做限制,线程大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。   ...package threadpool; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit

817110

java线程

一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。...Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java线程以及线程的使用。为我们在开发中处理线程的问题提供了非常大的帮助。...Java里面线程的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程,而只是一个执行线程的工具。真正的线程接口是ExecutorService。...每次提交一个任务就创建一个线程,直到线程达到线程的最大大小。线程的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程会补充一个新线程。...此线程不会对线程大小做限制,线程大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。 4.newScheduledThreadPool 创建一个大小无限的线程

1.1K60

java线程

4)、线程 方式 1 和方式 2:主进程无法获取线程的运算结果。...,线程就会使用拒绝策略 运行流程 1、线程创建,准备好 core 数量的核心线程,准备接受任务 2、新的任务进来,用 core 准备好的空闲线程执行。...3、常见的 4 种线程   newCachedThreadPool  创建一个可缓存线程,如果线程长度超过处理需要,可灵活回收空闲线程,若 无可回收,则新建线程。...4、开发中为什么使用线程  降低资源的消耗  通过重复利用已经创建好的线程降低线程的创建和销毁带来的损耗  提高响应速度  因为线程池中的线程数没有超过线程的最大上限时,有的线程处于等待分配任务...无限的创建和销毁线程不仅消耗系统资源,还降低系统的稳定性,使 用线程进行统一分配

15130

Java线程

: 因为创建线程需要比较大的开销,并且线程数太多的情况下上下文切换比较频繁,所以我们希望有一种机制来改善它,这就是线程,改善的核心就是控制线程的数量,通过暴露接口,可以满足用户创建不同场景下的线程...,提交一个任务时,如果线程池中的线程数没有达到核心线程数,则会创建一个新的线程 maximumPoolSize: 最大线程,工作队列满了的情况下,如果线程池中的线程数没有达到最大线程数,则会创建一个新线程...#addWorkerFailed 执行到这里,说明线程可能已经出现了问题,这时候需要回滚之气那的操作.即恢复workerCount的值,然后将该Worker从workers中移除,并尝试停止线程 private...在创建线程的时候,有提到一个参数:空闲时间,这个空闲时间是什么意思呢?...(即take),反之亦然 优缺点 适合执行时间比较短的任务,这种情况下,很多线程可以被复用,避免每次都创建大量线程的开销 但在任务执行时间比较长的情况,由于该线程线程数没有限制,可能会创建非常多的线程

92610

Java线程(六):线程

自JDK5之后,Java推出了一个并发包,java.util.concurrent,在Java开发中,我们接触到了好多的技术,String类的对象、Integer的共享、连接数据库的连接...我们的web项目都是部署在服务器上,浏览器端的每一个request就是一个线程,那么服务器需要并发的处理多个请求,就需要线程技术,下面来看一下Java并发包下如何创建线程。        ...创建一个可重用固定线程集合的线程,以共享的无界队列方式来运行这些线程。 [java] view plaincopyprint?...创建一个可根据需要创建新线程线程,但是在以前构造的线程可用时将重用它们。 [java] view plaincopyprint?...创建一个可安排在给定延迟后运行命令或者定期地执行的线程。 [java] view plaincopyprint?

1.1K00

java线程拒绝策略_Java线程拒绝策略

e.isShutdown()) { r.run(); } } } CallerRunsPolicy顾名思义就是调用者自己执行,看实现就知道,如果线程还没有关闭,就让将要被执行的线程自己调用自己的run...拒绝策略与模式 从线程的拒绝策略实现上也体现了面向对象的思想,把拒绝策略抽象在RejectedExecutionHandler接口中,ThreadPoolExecutor关联(更加具体的来说是聚合aggregation...自定义拒绝策略 既然设计上使用的是策略模式,那么对于我们来说扩展就是相当容易的事情了,简单来一个例子测试一下扩展线程的策略模式。...总结 Java提供的4中默认策略分别是CallerRunsPolicy如果线程没有关闭直接当前线程执行run方法,AbortPolicy抛出异常,DiscardPolicy丢弃任务,DiscardOldestPolicy...Java线程拒绝策略使用的是策略模式,抽象在RejectedExecutionHandler,如果需要扩展只需要实现RejectedExecutionHandler接口就可以了。

85330

Java线程_Java线程的大小与线程死锁

Java线程的大小与线程死锁 优化线程大小 线程大小对系统性能是有一定影响的,过大或者过小都会无法发挥最优的系统性能, 线程大小不需要非常精确,只要避免极大或者极小的情况即可, 一般来说,线程大小需要考虑...在书中给出一个估算线程大小的公式: 线程大小 = CPU的数量 * 目标CPU的使用率*( 1 + 等待时间与计算时间的比) 线程死锁 如果在线程池中执行的任务A在执行过程中又向线程提交了任务B...适合给线程提交相互独立的任务,而不是彼此依赖的任务. 对于彼此依赖的任务,可以考虑分别提交给不同的线程来执行。...Java线程异常处理 在使用ThreadPoolExecutor进行submit提交任务时,有的任务抛出了异常,但是线程并没有进行提示,即线程把任务中的异常给吃掉了,可以把submit提交改为execute...执行,也可以对ThreadPoolExecutor线程进行扩展.对提交的任务进行包装: package com.wkcto.threadpool; import java.util.concurrent

87840

Java的Executor框架线程实现原理

一,Java的Executor框架 1,Executor接口 public interface Executor { void execute(Runnable command); }...Executor接口是Executor框架中最基础的部分,定义了一个用于执行Runnable的execute方法,它没有实现类只有另一个重要的子接口ExecutorService 2,ExecutorService...(2)maximumPoolSize(线程最大大小):线程允许最大线程数。如果阻塞队列满了,并且已经创建的线程数小于最大线程数,则线程会再创建新的线程执行。...每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程初始的最大数corePoolSize,则将提交的任务存入到队列中。 2、newCachedThreadPool创建一个可缓存的线程。...单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的 线程的处理流程: 线程执行示意图: 1,首先线程判断基本线程是否已满(< corePoolSize

39120

Java中的线程与Executor框架详解

Java中的线程是通过Executor框架来实现的,Executor框架提供了一系列的接口和类来简化线程的使用和管理。...下面将详细介绍Java线程的相关概念和Executor框架的主要组成部分。 线程的概念和作用 线程是一种重要的并发编程技术,它由预先创建的一组线程组成,用于处理任务。...Executor框架的主要组成部分 Executor框架Java中用于管理线程的高级并发编程工具,它包含以下几个核心组成部分: 1、Executor接口:是Executor框架的顶级接口,定义了一个用于执行任务的方法...3、ThreadPoolExecutor类:是ExecutorService接口的主要实现类,也是Java中最常用的线程实现类。...Executor框架的基本用法 Executor框架Java提供的用于管理线程的高级并发编程工具。它简化了线程的使用和管理,并提供了一些额外的功能。

8810
领券