`
Franciswmf
  • 浏览: 800421 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多
1、newCachedThreadPool
package com.vxichina.cluster.persistence.thread.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 第一种线程池newCachedThreadPool
 * 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
 * @author admin
 *
 */
public class ThreadPoolOne {

	public static void main(String[] args) {
		ExecutorService threadPool=Executors.newCachedThreadPool();//理论上有无限个线程,实际使用时会重复利用已有的空闲线程
		//for #s
		for (int i = 0; i < 100; i++) {
			final int index=i;
			//System.out.println("for循环中index的值="+index);
			try {
				Thread.sleep(i*100);//触发操作系统立刻重新进行一次CPU竞争
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			threadPool.execute(new Runnable() {
				
				@Override
				public void run() {
					System.out.println("index的值="+index+",  当前线程:id="+Thread.currentThread().getId()+",  name="+Thread.currentThread().getName());
				}
			});
			
		}
		//for #e
	}
}



2、newFixedThreadPool
package com.vxichina.cluster.persistence.thread.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 第一种线程池newFixedThreadPool
 * 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
 * @author admin
 *
 */
public class ThreadPoolTwo {

	public static void main(String[] args) {
		ExecutorService threadPool=Executors.newFixedThreadPool(3);//只设置3个线程
		//for #s
		for (int i = 0; i < 1000; i++) {
			final int index=i;
			//System.out.println("for循环中index的值="+index);
			threadPool.execute(new Runnable() {
				
				@Override
				public void run() {
					System.out.println("index的值="+index+",  当前线程:id="+Thread.currentThread().getId()+",  name="+Thread.currentThread().getName());
					try {
						Thread.sleep(3000);//触发操作系统立刻重新进行一次CPU竞争
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			});
			
		}
		//for #e
	}
}



3、newScheduledThreadPool
package com.vxichina.cluster.persistence.thread.pool;

import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 第一种线程池newScheduledThreadPool
 * 创建一个定长线程池,支持定时及周期性任务执行。
 * @author admin
 *
 */
public class ThreadPoolThree {

	public static void main(String[] args) {
		//ScheduledExecutorService比Timer更安全,功能更强大
		ScheduledExecutorService threadPool=Executors.newScheduledThreadPool(3);//只设置3个线程
		//#s
		threadPool.schedule(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("我是延迟5秒后执行的哦");
			}
		}, 5, TimeUnit.SECONDS);//表示延迟5秒执行
		//#e
		
		//#s
		threadPool.scheduleAtFixedRate(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("我是延迟5秒后每2秒执行一回"+Calendar.getInstance().getTime().getHours()+":"+Calendar.getInstance().getTime().getMinutes()+":"+Calendar.getInstance().getTime().getSeconds());
			}
		}, 5, 2, TimeUnit.SECONDS);//延迟5秒后每2秒执行一次
		//#e
		
		//#s
		threadPool.scheduleWithFixedDelay(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("输出"+Calendar.getInstance().getTime().getHours()+":"+Calendar.getInstance().getTime().getMinutes()+":"+Calendar.getInstance().getTime().getSeconds());
			}
		}, 2, 5, TimeUnit.SECONDS);//初始延迟2秒后面每个延迟5秒执行
		//#e
	}
}



4、newSingleThreadExecutor
package com.vxichina.cluster.persistence.thread.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 第一种线程池newSingleThreadExecutor
 * 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
 * @author admin
 *
 */
public class ThreadPoolFour {

	public static void main(String[] args) {
		ExecutorService threadPool=Executors.newSingleThreadExecutor();//单一线程,相当于顺序执行各个任务
		//for #s
		for (int i = 0; i < 1000; i++) {
			final int index=i;
			threadPool.execute(new Runnable() {
				
				@Override
				public void run() {
					System.out.println("index的值="+index+",  当前线程:id="+Thread.currentThread().getId()+",  name="+Thread.currentThread().getName());
					try {
						Thread.sleep(1000);//触发操作系统立刻重新进行一次CPU竞争
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			});
			
		}
		//for #e
	}
}

分享到:
评论

相关推荐

    Java四种线程池的使用共6页.pdf.zip

    Java线程池是Java并发编程中的重要组成部分,它在多线程环境下的资源管理与任务调度方面发挥着关键作用。本资料"Java四种线程池的使用共6页.pdf.zip"详细介绍了Java中四种主要的线程池实现,旨在帮助开发者更有效地...

    Java四种线程池的简单介绍.docx

    ### Java 四种线程池的详细介绍 #### 1. `newCachedThreadPool`:创建一个可缓存线程池 - **定义与特点**: - `newCachedThreadPool` 创建了一个可缓存线程池,它能够根据当前的处理需求灵活调整线程数量。 - 当...

    java 四种线程池实例

    本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...

    Java四种线程池的使用详解

    Java四种线程池的使用详解 Java四种线程池的使用详解是Java多线程编程中的一种重要概念。Java通过Executors提供四种线程池,分别为newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool和...

    Java简单线程池 线程池中文文档

    简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类

    Java ExecutorService四种线程池使用详解

    Java的`java.util.concurrent`包中提供了`ExecutorService`的实现类,特别是通过`Executors`工厂类可以方便地创建四种类型的线程池,分别是`newCachedThreadPool`、`newFixedThreadPool`、`newScheduledThreadPool` ...

    Java实现通用线程池

    Java 实现通用线程池 Java 实现通用线程池是指使用 Java 语言编写一个通用的线程池,线程池通俗的描述就是预先创建若干空闲线程,等到需要用多线程去处理事务的时候去唤醒某些空闲线程执行处理任务,这样就省去了...

    Java几种线程池类型介绍及使用.docx

    在Java中,线程池的实现类主要包含以下四种: 1. **`newCachedThreadPool`**: 这种类型的线程池会根据需要创建新线程,并且能够重用已有的线程。如果线程在60秒内没有被使用,那么线程会被终止并从缓存中移除,...

    对 Java 四种线程池的简要分析

    Java线程池是一种高效管理线程资源的方式,它允许开发者预先配置一组线程,以便在需要时复用,而不是每次需要执行任务时都创建新的线程。线程池的顶级接口`Executor`定义了调度任务的基本操作,而实际的线程池实现由...

    Java实现的线程池、消息队列功能

    标题中的“Java实现的线程池、消息队列功能”是指在Java编程中,如何利用编程技术实现线程池和消息队列这两种重要的并发处理机制。线程池和消息队列是解决多线程环境下资源管理和任务调度的有效手段,它们在高并发、...

    java 4种线程池.jpg

    java 4种线程池.jpg

    详谈Java几种线程池类型介绍及使用方法

    Java 中的线程池是一种高效的并发编程机制,它可以将任务提交给线程池,并由线程池中的线程执行任务, Java 提供了四种线程池类型,分别是 newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool 和 ...

    JAVA使用线程池查询大批量数据

    线程池是一种多线程处理形式,预先创建了若干个线程,当有任务需要执行时,会从线程池中取出一个线程来执行任务,任务执行完毕后,线程返回线程池中等待新的任务。这种机制避免了频繁创建和销毁线程带来的性能开销,...

    java线程池使用后到底要关闭吗

    java线程池是一种高效的并发编程技术,可以帮助开发者更好地管理线程资源,提高系统的性能和可靠性。然而,在使用java线程池时,一个常见的问题是:使用完线程池后到底要不要关闭?本文将通过实例代码和详细解释,...

    Java/Android线程池演示Demo

    在Android和Java应用开发中,线程池是一种重要的并发编程工具,它可以帮助我们高效地管理后台任务,提高系统的响应速度和资源利用率。本Demo主要展示了如何在Java或Android环境中使用线程池,以下是对相关知识点的...

    java实现通用线程池的代码

    本文旨在使用Java语言编写一个通用的线程池。当需要使用线程池处理事务时,只需按照指定规范封装好事务处理对象,然后用已有的线程池对象去自动选择空 闲线程自动调用事务处理对象即可。并实现线程池的动态修改...

    java线程池完整代码

    "Java 线程池完整代码解析" Java 线程池是 Java 语言中的一个重要概念,它允许开发者创建和管理多个线程,以提高程序的并发性和性能。下面是对给定文件的解析,包括 title、description、标签和部分内容的解析。 ...

    Java8并行流中自定义线程池操作示例

    Java8并行流中自定义线程池操作示例 Java8并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了...

    java线程池封装j

    Java线程池是一种高效管理线程的技术,它允许开发者预定义一组线程,根据任务的需要灵活调度,而不是每次需要执行任务时都创建新的线程。这种设计模式大大提高了系统的性能,减少了系统资源的消耗,特别是在高并发...

    java socket(线程池)

    是一个java在进行socket编程时,关于线程池的介绍,有代码和例子

Global site tag (gtag.js) - Google Analytics