JAVA线程池样例

简介: 主要抄了三种: newSingleThreadExecutor newCachedThreadPool() newFixedThreadPool(int)

主要抄了三种:

newSingleThreadExecutor

newCachedThreadPool()

newFixedThreadPool(int)


0fce6f058f09c352504418099c90ba3e784a9aeb



package demo.thread;

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

public class ThreadMain {

	public static void main(String[] args) throws Exception {
		ExecutorService sexecutor = Executors.newSingleThreadExecutor();
		for (int i = 0; i < 5; i++) {
			final int no =i;
			Runnable runnable = new Runnable() {
				public void run() {
					try {
						System.out.println("Single executor into " + no);
						Thread.sleep(1000L);
						System.out.println("Single executor end " + no);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			};
			sexecutor.execute(runnable);
		}
		sexecutor.shutdown();
		
		
		ExecutorService cexecutor = Executors.newCachedThreadPool();
		for (int i = 0; i < 20; i++) {
			final int no =i;
			Runnable runnable = new Runnable() {
				public void run() {
					try {
						System.out.println("Cached executor into " + no);
						Thread.sleep(1000L);
						System.out.println("Cached executor end " + no);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			};
			cexecutor.execute(runnable);
		}
		cexecutor.shutdown();
		
		ExecutorService fexecutor = Executors.newFixedThreadPool(5);
		for (int i = 0; i < 20; i++) {
			final int no =i;
			Runnable runnable = new Runnable() {
				public void run() {
					try {
						System.out.println("Fixed executor into " + no);
						Thread.sleep(1000L);
						System.out.println("Fixed executor end " + no);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			};
			fexecutor.execute(runnable);
		}
		fexecutor.shutdown();
		
		
		
		System.out.println("The main thread end.");
		
	}
}


Single executor into 0
Cached executor into 1
Cached executor into 0
Cached executor into 2
Cached executor into 3
Cached executor into 4
Cached executor into 5
Cached executor into 6
Cached executor into 7
Cached executor into 8
Cached executor into 9
Cached executor into 10
Cached executor into 11
Cached executor into 12
Cached executor into 17
Cached executor into 14
Cached executor into 13
Cached executor into 18
Cached executor into 16
Cached executor into 15
Cached executor into 19
Fixed executor into 1
Fixed executor into 2
The main thread end.
Fixed executor into 0
Fixed executor into 4
Fixed executor into 3
Single executor end 0
Single executor into 1
Cached executor end 4
Cached executor end 3
Cached executor end 0
Cached executor end 1
Cached executor end 2
Cached executor end 7
Cached executor end 6
Cached executor end 11
Cached executor end 13
Cached executor end 17
Cached executor end 5
Cached executor end 9
Cached executor end 10
Cached executor end 12
Cached executor end 8
Cached executor end 18
Cached executor end 14
Cached executor end 16
Cached executor end 15
Cached executor end 19
Fixed executor end 1
Fixed executor into 5
Fixed executor end 0
Fixed executor end 4
Fixed executor into 7
Fixed executor end 2
Fixed executor into 8
Fixed executor into 6
Fixed executor end 3
Fixed executor into 9
Single executor end 1
Single executor into 2
Fixed executor end 5
Fixed executor into 10
Fixed executor end 6
Fixed executor into 11
Fixed executor end 7
Fixed executor into 12
Fixed executor end 8
Fixed executor into 13
Fixed executor end 9
Fixed executor into 14
Single executor end 2
Single executor into 3
Fixed executor end 10
Fixed executor into 15
Fixed executor end 12
Fixed executor end 13
Fixed executor end 11
Fixed executor into 17
Fixed executor into 16
Fixed executor into 18
Fixed executor end 14
Fixed executor into 19
Single executor end 3
Single executor into 4
Fixed executor end 15
Fixed executor end 18
Fixed executor end 16
Fixed executor end 17
Fixed executor end 19
Single executor end 4


目录
相关文章
|
13天前
|
Java 调度
Java并发编程:深入理解线程池的原理与实践
【4月更文挑战第6天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将从线程池的基本原理入手,逐步解析其工作过程,以及如何在实际开发中合理使用线程池以提高程序性能。同时,我们还将关注线程池的一些高级特性,如自定义线程工厂、拒绝策略等,以帮助读者更好地掌握线程池的使用技巧。
|
21天前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
38 1
|
15天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
11天前
|
Java
Java 并发编程:深入理解线程池
【4月更文挑战第8天】本文将深入探讨 Java 中的线程池技术,包括其工作原理、优势以及如何使用。线程池是 Java 并发编程的重要工具,它可以有效地管理和控制线程的执行,提高系统性能。通过本文的学习,读者将对线程池有更深入的理解,并能在实际开发中灵活运用。
|
30天前
|
监控 Java
Java并发编程中的线程池优化技巧
在Java并发编程中,线程池扮演着至关重要的角色。本文将深入探讨如何优化Java线程池,从线程池的创建与配置、任务队列的选择、拒绝策略的制定、线程池状态的监控等多个方面进行详细阐述。通过本文的阅读,您将了解到如何合理地利用线程池,提高系统的并发性能,从而更好地应对各种并发场景。
|
11天前
|
Java
Java并发编程:深入理解线程池
【4月更文挑战第7天】在现代软件开发中,多线程编程已经成为一种不可或缺的技术。为了提高程序性能和资源利用率,Java提供了线程池这一强大工具。本文将深入探讨Java线程池的原理、使用方法以及如何根据实际需求定制线程池,帮助读者更好地理解和应用线程池技术。
15 0
|
2天前
|
存储 缓存 监控
Java线程池
Java线程池
14 1
|
19天前
|
存储 安全 Java
Java线程池ThreadPoolExcutor源码解读详解08-阻塞队列之LinkedBlockingDeque
**摘要:** 本文分析了Java中的LinkedBlockingDeque,它是一个基于链表实现的双端阻塞队列,具有并发安全性。LinkedBlockingDeque可以作为有界队列使用,容量由构造函数指定,默认为Integer.MAX_VALUE。队列操作包括在头部和尾部的插入与删除,这些操作由锁和Condition来保证线程安全。例如,`linkFirst()`和`linkLast()`用于在队首和队尾插入元素,而`unlinkFirst()`和`unlinkLast()`则用于删除首尾元素。队列的插入和删除方法根据队列是否满或空,可能会阻塞或唤醒等待的线程,这些操作通过`notFul
42 5
|
19天前
|
存储 安全 Java
Java线程池ThreadPoolExcutor源码解读详解07-阻塞队列之LinkedTransferQueue
`LinkedTransferQueue`是一个基于链表结构的无界并发队列,实现了`TransferQueue`接口,它使用预占模式来协调生产者和消费者的交互。队列中的元素分为数据节点(isData为true)和请求节点(isData为false)。在不同情况下,队列提供四种操作模式:NOW(立即返回,不阻塞),ASYNC(异步,不阻塞,但后续线程可能阻塞),SYNC(同步,阻塞直到匹配),TIMED(超时等待,可能返回)。 `xfer`方法是队列的核心,它处理元素的转移过程。方法内部通过循环和CAS(Compare And Swap)操作来确保线程安全,同时避免锁的使用以提高性能。当找到匹
34 5
|
19天前
|
存储 安全 Java
Java线程池ThreadPoolExcutor源码解读详解04-阻塞队列之PriorityBlockingQueue原理及扩容机制详解
1. **继承实现图关系**: - `PriorityBlockingQueue`实现了`BlockingQueue`接口,提供了线程安全的队列操作。 - 内部基于优先级堆(小顶堆或大顶堆)的数据结构实现,可以保证元素按照优先级顺序出队。 2. **底层数据存储结构**: - 默认容量是11,存储数据的数组会在需要时动态扩容。 - 数组长度总是2的幂,以满足堆的性质。 3. **构造器**: - 无参构造器创建一个默认容量的队列,元素需要实现`Comparable`接口。 - 指定容量构造器允许设置初始容量,但不指定排序规则。 - 可指定容量和比较
40 2