一 使用线程池的好处 池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池 提供了一种限制和管理资源(包括执行一个任务)。 每个 线程池 还维护一些基本统计信息,例如已完成任务的数 ...
分类:
编程语言 时间:
2020-02-25 16:10:08
阅读次数:
109
为什么使用线程池 在生产环境中,我们经常面临这样的情况:一个请求的处理时间很短,但是请求的数量很大。 在这种情况下,如果为每个请求分别创建一个线程,那么OS可以使用有限的硬件资源来创建线程。这些操作,如切换线程状态和销毁线程,将消耗更少的资源进行业务处理。 因此,理想的处理方法是将请求中的线程数控制 ...
分类:
编程语言 时间:
2020-02-23 14:22:34
阅读次数:
82
设:我们有一个coreSize=10,maxSize=20,keepAliveTime=60s,queue=40 1、池初始化时里面没有任何线程。 2、当有一个任务提交到池就创建第一个线程。 3、若继续提交任务,有空闲线程就调拨空闲线程来处理任务?若没有线程空闲则再新建一个线程来处理,如此直到cor ...
分类:
编程语言 时间:
2020-02-20 20:09:05
阅读次数:
67
ThreadPoolExecutor 创建和管理线程池,减少内存消耗,提高执行效率。 任务执行过程 1.当线程数小于核心线程数时,创建线程; 2.当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列; 3.当线程数大于等于核心线程数,且任务队列已满: 若线程数小于最大线程数,创建线程 若 ...
分类:
编程语言 时间:
2020-02-11 00:06:53
阅读次数:
76
1. 背景 1.1 static修饰类变量、方法、方法块。 public + static = 该变量任何类都可以直接访问,而且无需初始化类,直接使用 类名.static 变量 1.2 多个线程同时对共享变量进行读写时,很有可能会出现并发问题.(存在共享数据时才需要考虑线程安全) 1.3 publi ...
分类:
编程语言 时间:
2020-02-10 09:57:33
阅读次数:
146
1.实例化一个线程对象 1 Thread t = new Thread(); 2 t.setName("甲"); 2.实例化一个线程对象的同时,通过构造方法对线程进行命名 1 Thread(Runnable r, String name) 2 Thread t = new Thread(() -> ...
分类:
编程语言 时间:
2020-02-10 09:35:16
阅读次数:
101
同步方法,仍然后有线程锁. 1 对于非静态方法,线程锁(同步监视器)是this 2 对于静态方法,线程锁是该类. package com.LearnJava.Thread; /* 同步代码块 synchronized(同步监视器){ //需要同步的代码 } 同步监视器:俗称 锁,可以是任何实例化的类 ...
分类:
编程语言 时间:
2020-02-08 15:19:46
阅读次数:
64
package com.LearnJava.Thread; /* 同步代码块 synchronized(同步监视器){ //需要同步的代码 } 同步监视器:俗称 锁,可以是任何实例化的类.但是需要共用同一个实例. */ class WindowSell implements Runnable{ Ob ...
分类:
编程语言 时间:
2020-02-08 13:55:40
阅读次数:
64
从池化技术到底层实现,一篇文章带你贯通线程池技术。 1、池化技术简介 在系统开发过程中,我们经常会用到池化技术来减少系统消耗,提升系统性能。 在编程领域,比较典型的池化技术有: 线程池、连接池、内存池、对象池等。 对象池通过复用对象来减少创建对象、垃圾回收的开销;连接池(数据库连接池、Redis连接 ...
分类:
编程语言 时间:
2020-02-07 16:55:44
阅读次数:
76