一、简介
好吧。坑爹了,我以为JDK里面没有线程池这种东西,之前就随便写了一个,应用到线上系统了。
结果最近不经意的发现了这个东西。开始悔过认错。给大家简单介绍一下这个吧。
二、Java线程池(二)
所说的线程池(二)就是这个java.util.concurrent包下的ThreadPoolExecutor
他的作用就是使用可能的几个池线程之一执行每个提交的任务
线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。
三、介绍使用咯
JDK中推荐的使用方式是较为方便的 Executors 工厂方法 Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)、Executors.newFixedThreadPool(int)(固定大小线程池)和 Executors.newSingleThreadExecutor()(单个后台线程)
属性中有一个corePoolSize 表示初始大小设置。
maximumPoolSize 表示最大数量设置。
线程池使用execute()方法来提交线程操作。
并且这个线程池还提供了beforeExecute() 和 afterExecute 这两种方法分别在执行每个任务之前和之后调用。它们可用于操纵执行环境。
四、简单例子
package com.immomo.test.bean;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
public class MongoTest {
public void start(){
int threadPoolSize = 800;
// 固定大小线程池 //800
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(threadPoolSize);
// 创建线程工厂
ThreadFactory threadFactory = Executors.defaultThreadFactory();
for (int i = 0; i < threadPoolSize; i++) {
try {
Thread thread = threadFactory.newThread(new SystemOutPrintThread());
executor.execute(thread);
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MongoTest test = new MongoTest();
test.start();
}
}
class SystemOutPrintThread implements Runnable{
@Override
public void run() {
while (true) {
System.out.println("[Andy] 乱打印一点垃圾信息咯~~");
}
}
}
乱写了800个死循环线程都扔进去了- - 哈哈哈。。
好了就这样了 大家看着玩吧~~ 下午好
分享到:
相关推荐
JDK1.5中的线程池(ThreadPoolExecutor)使用简介
JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介
JDK 自带线程池是 Java 语言中用于管理和执行线程的工具,旨在提高多线程编程的效率和灵活性。本文将详细介绍 JDK 自带线程池的组成、创建方法、优点和常见应用场景。 多线程技术 多线程技术是指在一个处理器单元...
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
如果线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过handler所指定的策略来处理此任务。 三、线程池的优点 使用线程池可以带来以下几个优点: * 降低...
4. 当线程池中的线程数量超过最大线程数时,线程池将拒绝执行新任务。否则,线程池会创建新的非核心线程来处理任务,但总数不会超过最大线程数。 在分析源码之前,我们需要了解ThreadPoolExecutor构造函数的一些...
jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk自带的线程池。 一、jdk...
3. `keepAliveTime`: 当线程池中的线程数量超过`corePoolSize`且线程空闲时间超过`keepAliveTime`,这些线程将被终止,从而减少线程池的大小。 4. `unit`: 时间单位,用于衡量`keepAliveTime`,可以选择`TimeUnit`中...
corePoolSize: 线程池维护线程的最少数量 maximumPoolSize:线程池维护线程的最大数量 keepAliveTime: 线程池维护线程所允许的空闲时间 unit: 线程池维护线程所允许的空闲时间的单位 workQueue: 线程池所使用的...
JDK线程池是Java中的一个内置线程池实现,它提供了一个ExecutorService接口,该接口提供了execute、submit、shutdown等方法来管理线程池。JDK线程池可以通过ThreadPoolExecutor类来创建,ThreadPoolExecutor类提供了...
而线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池的方法,...
然而,在实际开发中,通常推荐使用JDK提供的`ThreadPoolExecutor`类,因为它提供了更丰富的功能和更好的性能优化。如《Effective Java》第二版第47条建议,避免重复造轮子,使用成熟且经过优化的类库。
在Java编程语言中,线程并发和线程池是多任务执行的核心概念,尤其是在JDK 1.5及以后的版本中得到了显著增强。线程并发允许程序同时执行多个任务,提高了程序的效率和响应性。线程池是管理线程资源的有效方式,通过...
线程池通过内置的工作队列来管理任务,当有新任务提交时,线程池会根据当前线程池中线程的数量以及工作队列的状态来决定如何处理新任务。如果线程池中还有空闲的工作线程,新任务将被立即分配给一个空闲的工作线程...
corePoolSize:核心池的大小,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中; ...
`ThreadPool`类的构造函数接收一个`poolSize`参数,表示线程池中工作线程的数量,然后创建相应数量的`WorkThread`并启动。每个`WorkThread`会调用`getTask`方法从工作队列中获取任务进行执行。当线程池关闭时,会...
- keepAliveTime:空闲线程的存活时间,当线程池中线程数量超过核心线程数时,空闲线程的存活时间。 - unit:keepAliveTime的时间单位。 - workQueue:工作队列,当请求到来,而线程池中线程数已满时,新的任务会被...
在早期的JDK版本(如JDK 1.4及之前)中,线程池的功能相对简单,使用起来不够灵活。然而,自JDK 1.5开始,随着`java.util.concurrent`包的引入,Java线程池的功能得到了极大的增强,为开发者提供了更加高效且易于...
对于IO密集型任务,线程池中的线程数量通常设置为CPU核心数的2倍,因为这些任务大部分时间在等待IO操作完成,此时多线程可以充分利用CPU空闲时间。 2. 实现一个我们自己的线程池 自定义线程池需要实现`java.util....
阿里的代码规范中提出,不推荐使用JDK提供的线程池创建方法(newCachedThreadPool、newFixedThreadPool等),因此对ThreadPoolExecutor方法进行了简单封装,以方便使用。