通过util.concurrent.Executors直接创建线程池,非常方便
package thread.pool; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 使用线程池的好处: * 线程池维护一定数量的worker线程 * 调用者只需将任务放入到线程池中即可 * 具体任务的执行交给线程池中的线程去完成 * 主要为了提高系统响应能力 * concurrent为并发提供支持,关注并发 * synchronized同步为共享资源安全使用提供支持,关注共享数据被正确操作 */ class ThreadPool { private static ThreadPool pool = new ThreadPool(); public static ThreadPool getThreadPool() { return pool; } final int nThreads = 5; ExecutorService executor = null; //创建固定大小的线程池,线程池中的线程会不断被重用(当空闲时) private ThreadPool() { /** * 始终维护固定数量的线程,线程在执行过程中由于错误导致终止,将会自动创建新的线程进行替补 */ executor = Executors.newFixedThreadPool(nThreads); /** * 任务数超过线程池中处理任务的线程数量时,会自动创建新的线程并加入到线程池中执行任务 * 线程数量会根据任务多少动态变化(自动创建新线程或释放多余的空闲线程) */ //executor = Executors.newCachedThreadPool(); /** * 线程池中只有唯一线程,即使发生错误导致线程终止(在shutdown()调用之前),线程池会自动创建一个新的线程进行替补 * 与newFixedThreadPool(1)不同的时,此方法返回的executor确保线程池不会被添加新的线程,始终只有一个,能实现任务执行的连续性/前后性 */ //executor = Executors.newSingleThreadExecutor(); } public ThreadPool addTask(Runnable task) { executor.execute(task); return this; } public void shutdown() { executor.shutdown(); } } /** * 封装任务 */ class Task implements Runnable { //统计每个线程总共执行了多少个任务 private static ThreadLocal<Integer> dealTaskCount = new ThreadLocal<Integer>(); private String taskName; public Task(String taskName) { this.taskName = taskName; } public void run() { Integer taskCount = dealTaskCount.get(); taskCount = taskCount==null? 1 : ++taskCount; dealTaskCount.set(taskCount); System.out.println(Thread.currentThread().getName() + " dealing task: " + taskName +", complete task:" + taskCount); try { Thread.sleep(new Random().nextInt(100)); } catch (InterruptedException e) { e.printStackTrace(); } } } //Test public class Concurrent_ThreadPool { public static void main(String[] args) { ThreadPool pool = ThreadPool.getThreadPool(); //提交50个任务到线程池中 for(int i=1;i<=50;i++) { pool.addTask(new Task("Task"+i)); } //when server shutdown pool.shutdown(); } }
相关推荐
为了解决这些问题,Java.util.concurrent引入了线程池(ThreadPool)和任务调度。线程池允许预先创建一组线程,任务可以被提交到线程池而不是直接启动新线程,从而提高了效率和资源利用率。线程池可以通过...
java.util.concurrent.Executors提供了一个java.util.concurrent.Executor接口的实现用于创建线程池。线程池技术主要解决处理器单元内多个线程执行的问题,可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐...
import java.util.concurrent.Executors; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SimpleDateFormatExample { private static SimpleDateFormat...
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledExecutorExample { public static void main...
`java.util.concurrent.Executors`工厂类则是创建ExecutorService实例的便捷途径,它可以创建固定大小、单线程、缓存线程池等多种类型的ExecutorService。 学习这部分内容,你将掌握如何利用ExecutorService和...
import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { // 配置对象池 GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); ...
Java平台提供了丰富的并发编程工具,其中`java.util.concurrent`包尤其引人注目。这个包包含了多种并发容器和实用工具,能够帮助开发者轻松地编写出高性能且可维护的并发应用程序。本文将深入探讨`java.util....
在Java中,`java.util.concurrent`包提供了线程池的实现,其中`ExecutorService`接口是线程池的核心,`ThreadPoolExecutor`类是其主要实现。线程池的创建可以通过`Executors`类的静态工厂方法,例如`...
在Java中,`java.util.concurrent`包下的`ExecutorService`、`ThreadPoolExecutor`和`Executors`类提供了线程池的相关功能。 1. **ExecutorService接口**:这是Java并发框架的核心接口,它定义了创建、管理和执行...
import java.util.concurrent.Executors; public class SmartImageView extends ImageView { private static final int LOADING_THREADS = 4; private static ExecutorService threadPool = Executors....
- `Executors`工厂类提供多种创建线程池的方法,如`newFixedThreadPool`(固定大小线程池)、`newSingleThreadExecutor`(单线程线程池)等。 7. **Future和Callable** - `Callable`接口类似Runnable,但其`call...
线程池是多线程编程中的一个重要概念,它在Java中通过`java.util.concurrent`包中的`ExecutorService`和相关的接口、类实现。这个ThreadPoolStudy.rar文件可能包含了作者对线程池深入研究的成果,特别是关于线程池的...
标题中的"ThreadPool2"指的是Java编程语言中的线程池实现,通常是指`java.util.concurrent.ThreadPoolExecutor`。线程池是多线程编程中的一个重要概念,它管理一组可重用的工作线程,用于执行提交的任务,提高了系统...
import java.util.concurrent.Executors; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class SocketListener implements ServletContextListener { private ...
Java标准库中的`java.util.concurrent`包提供了强大的线程池功能支持,主要由`ExecutorService`接口及其实现类`ThreadPoolExecutor`和`Executors`工具类提供。 #### 二、Java线程池的三种类型 根据不同的应用场景...
"threadpool ultimate version" 指的可能是一个经过优化和增强的线程池实现,它旨在提高系统性能,减少线程创建和销毁的开销,并确保系统的稳定性和资源效率。 线程池的基本思想是预先创建一定数量的线程,这些线程...
为了解决这些问题,Java提供了线程池(ThreadPool)的概念,它是Java并发编程中的重要组成部分,主要由`java.util.concurrent`包下的`ExecutorService`接口及其实现类来支持。 线程池的核心概念包括线程复用、任务...
import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class SemaphoreLearn { //信号量总数 private static final int SEM_MAX = 12; public static void main(String[] ...
描述中提到的博客链接(由于实际无法访问,这里将基于一般线程池实现进行解释)可能详细解析了Java的`java.util.concurrent.ThreadPoolExecutor`类,它是Java标准库提供的线程池实现。这个类提供了丰富的参数来定制...