1. 原理:
线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源 ,类似于数据库连接池等。从系统资源的角度看,
在一个 JVM 里创建太多的线程可能会导致系统由于过度消耗内存而用完内存或“切换过度” , 线程池就可以用于限制任何给定时刻处理的请求数目,避免创建过多的线程导致系统崩溃。
2. 线程池的种类:
固定大小的线程池:创建固定线程数量的线程池,如果任务数大于线程池中线程的数量,那么任务将等待
单任务线程池:创建一个线程的线程池,相当于单线程串行执行所有任务。
可变尺寸的线程池 :根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们
定时器线程池:指定线程池中线程在多长时间后执行,以及每个多长时间执行一次
3.示例代码:
代码1:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author lcy
*
*2012-5-22
*/
public class Test {
public static void main(String[] args) {
//创建一个可重用固定线程数的线程池
// ExecutorService pool = Executors.newFixedThreadPool(2);
//单任务线程池
// ExecutorService pool = Executors.newSingleThreadExecutor();
//创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
ExecutorService pool = Executors.newCachedThreadPool();
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Thread t3 = new MyThread();
Thread t4 = new MyThread();
Thread t5 = new MyThread();
//将线程放入池中进行执行
pool.execute(t1);
pool.execute(t2);
pool.execute(t3);
pool.execute(t4);
pool.execute(t5);
//关闭线程池
pool.shutdown();
}
}
class MyThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"正在执行。。。");
}
}
- import java.util.concurrent.Executors;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.TimeUnit;
-
-
-
-
-
-
- public class Test2 {
- public static void main(String[] args) {
-
- ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);
-
- Thread t1 = new MyThread();
- Thread t2 = new MyThread();
- Thread t3 = new MyThread();
- Thread t4 = new MyThread();
- Thread t5 = new MyThread();
-
- pool.execute(t1);
- pool.execute(t2);
- pool.execute(t3);
- 针对哪个线程进行定时,时间长度,时间单位
- pool.schedule(t4, 10, TimeUnit.MILLISECONDS);
- pool.schedule(t5, 10, TimeUnit.MILLISECONDS);
-
- pool.shutdown();
- }
- }
-
- class MyThread2 extends Thread {
- @Override
- public void run() {
- System.out.println(Thread.currentThread().getName() + "正在执行。。。");
- }
- }
分享到:
相关推荐
.......................................JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不...
Java线程、线程池和XML解析是Java编程中至关重要的三个概念,它们在实际开发中扮演着不可或缺的角色。下面将分别对这三个主题进行深入的介绍。 首先,我们来看Java线程。线程是程序执行的最小单位,一个进程可以...
Java线程调度策略包括抢占式调度和合作式调度。在Java中,默认采用的是抢占式调度,即线程的执行优先级由JVM决定,高优先级的线程可能会中断低优先级线程的执行。然而,开发者可以通过设置线程的优先级来影响调度,...
Java 多线程和线程池 Java 多线程是指在 Java 编程语言中,一个线程的动态执行过程。这个过程包括线程的创建、执行和销毁三个阶段。在 Java 中,创建线程有多种方式,包括通过实现 Runnable 接口、继承 Thread 类...
四、数据库操作与线程 在Winform应用中,与数据库的交互通常涉及I/O操作,这些操作适合在后台线程上执行。例如,使用ADO.NET进行异步数据库操作: ```csharp private async void Button_Click(object sender, ...
下面将详细介绍 Java 中线程的创建方式以及线程池的使用。 1. 创建线程的方式: Java 提供了两种主要的创建线程的方式: - **实现 Runnable 接口**:你的类实现 Runnable 接口,并重写 `run()` 方法。然后通过...
除了`ThreadPoolExecutor`,Java还提供了`Executors`工具类,它提供了一些预设的线程池配置,如`newFixedThreadPool`(固定大小线程池)、`newSingleThreadExecutor`(单线程线程池)等,方便开发者快速创建线程池。...
2. newSingleThreadExecutor:创建一个单线程线程池,所有任务都在一个线程中顺序执行,保证了任务的执行顺序。 3. newFixedThreadPool:创建一个固定大小的线程池,线程数量保持不变,任务排队等待执行。 4. ...
简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类
本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...
Java 实现通用线程池是指使用 Java 语言编写一个通用的线程池,线程池通俗的描述就是预先创建若干空闲线程,等到需要用多线程去处理事务的时候去唤醒某些空闲线程执行处理任务,这样就省去了频繁创建线程的时间,...
java线程池是一种高效的并发编程技术,可以帮助开发者更好地管理线程资源,提高系统的性能和可靠性。然而,在使用java线程池时,一个常见的问题是:使用完线程池后到底要不要关闭?本文将通过实例代码和详细解释,...
标题中的“Java实现的线程池、消息队列功能”是指在Java编程中,如何利用编程技术实现线程池和消息队列这两种重要的并发处理机制。线程池和消息队列是解决多线程环境下资源管理和任务调度的有效手段,它们在高并发、...
多线程与线程池是Java编程中至关重要的概念,特别是在处理高并发场景时,它们的作用尤为突出。本文将深入探讨这两个主题,并结合标签中的"排它锁"、"重入锁"、"共享锁"等概念进行讲解。 首先,线程是操作系统分配...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,我们可以通过实现Runnable接口或继承Thread类来创建线程。然而,直接使用线程可能存在一些问题,如资源管理...
Java线程池是一种高效管理线程的机制,它允许开发者预先创建一定数量的线程,然后根据需求将任务提交到线程池中进行执行。线程池的核心在于它能够有效地控制运行的线程数量,避免因为频繁创建和销毁线程而产生的性能...
四、线程池的工作流程 1. 当提交一个任务到线程池时,如果当前运行的线程数小于核心线程数,线程池会创建新的线程来执行任务。 2. 如果线程数已达核心线程数,新任务会被放入任务队列中等待。 3. 当任务队列也已满,...
### Java编程中线程池的最大风险规避 #### 死锁 在Java编程中,线程池带来的一个显著风险就是死锁。死锁是指多个线程因互相等待对方持有的资源而不释放自身资源,导致无限期等待的情况。对于一般的多线程程序而言...
Java线程池是Java并发编程中的重要组成部分,它...总之,理解和熟练使用Java四种线程池能够显著提升多线程应用的性能和稳定性。通过深入学习这部分内容,开发者可以更好地应对高并发场景,编写出高效、可靠的并发代码。