`

线程池——有限无限队列测试

 
阅读更多
package com.bjsxt.height.concurrent018;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class UseThreadPoolExecutor2 implements Runnable{

	private static AtomicInteger count = new AtomicInteger(0);
	
	@Override
	public void run() {
		try {
			int temp = count.incrementAndGet();
			System.out.println("任务" + temp);
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws Exception{
		//System.out.println(Runtime.getRuntime().availableProcessors());
		BlockingQueue<Runnable> queue = 
				//new LinkedBlockingQueue<Runnable>();
				new ArrayBlockingQueue<Runnable>(15);
		//有界队列执行过程:20个线程,先执行五个(因为初始化了5个)然后判断队列放不放得下剩下的15个,如果放不下
		//15个,就再创建5个线程 (因为Max,之前创建了五个,所以还可以再创建五个所以是10),如果放得下,Max参数无效,每次还是执行
		//5个线程。那剩下的线程就只能放到队列里。	
		ExecutorService executor  = new ThreadPoolExecutor(
					5, 		//core
					10, 	//max
					120L, 	//2fenzhong
					TimeUnit.SECONDS,
					queue);
		
		for(int i = 0 ; i < 20; i++){
			executor.execute(new UseThreadPoolExecutor2());
		}
		Thread.sleep(1000);
		System.out.println("queue size:" + queue.size());		//10
		Thread.sleep(2000);
	}


}

 

分享到:
评论

相关推荐

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

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

    Android中的线程池与任务队列

    线程池和任务队列是实现这一目标的关键工具。本文将深入探讨Android中线程池与任务队列的概念、工作原理以及它们如何协同工作。 线程池(ThreadPool)是一种多线程处理形式,处理过程中将任务添加到队列,然后在...

    线程池&&队列各类区别使用场景

    线程池和队列在IT领域中是两个非常重要的概念,尤其在多线程编程和并发处理中扮演着核心角色。它们各自有独特的特性和适用场景,理解它们的区别和使用场景对于优化系统性能至关重要。 首先,让我们从线程池开始。...

    java 线程池实现多并发队列后进先出

    在"java 线程池实现多并发队列后进先出"这个主题中,我们关注的是线程池如何利用特定类型的队列来实现后进先出(LIFO,Last-In-First-Out)的行为。通常,线程池默认使用先进先出(FIFO,First-In-First-Out)的队列...

    数据结构——栈和队列经典测试题

    数据结构——栈和队列经典测试题 一、栈和队列的概念和特点 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶,不允许插入和删除运算的一端称为栈底。栈的特点是后进先出(Last In First Out,LIFO),即...

    并发-线程池和阻塞队列

    在Java编程中,"并发-线程池和阻塞队列"是两个核心概念,它们在多线程环境下处理任务调度和数据同步方面发挥着重要作用。线程池是一种管理线程资源的有效方式,而阻塞队列则常用于线程间通信和数据共享。 线程池...

    并发-线程池和阻塞队列.pdf

    线程池和阻塞队列是实现并发的关键组件之一。本文将详细介绍线程池原理、使用场景及注意事项,以及阻塞队列的相关知识。 首先,线程池是一种基于池化思想管理线程的技术,它可以重用一组线程执行多个任务。线程池的...

    c++ 线程池实现及安全队列

    这些线程通常在一个无限循环中运行,直到线程池被关闭。 3. **提交接口**:供用户提交任务到线程池的API,应保证线程安全。 4. **线程同步机制**:如信号量、条件变量等,用于在线程之间进行同步,确保任务的正确...

    数据结构第三章笔记——栈和队列

    数据结构第三章笔记——栈和队列

    数据结构(清华大学版)——栈和队列

    数据结构(清华大学版)——栈和队列

    数据结构——堆栈和队列

    总的来说,这个压缩包提供了关于数据结构——堆栈和队列的C语言实现,以及额外的数字转换和字符串处理功能。这些基础知识对于理解和编写高效的计算机程序至关重要。通过学习和理解这些内容,开发者能够更好地解决...

    数据结构(C语言版)——循环顺序队列(代码版)

    数据结构(C语言版)——循环顺序队列(代码版)里面包含C文件和exe文件。基本操作为:1:初始化循环顺序队列2:销毁循环顺序队列3:清空循环顺序队列4:循环顺序队列是否为空5:返回循环顺序队列头元素6:元素入队7:元素出队8:...

    BlockingQueue队列自定义超时时间取消线程池任务

    现在我们来详细讨论如何利用这些技术实现“BlockingQueue队列自定义超时时间取消线程池任务”。 首先,`BlockingQueue`是一个并发容器,它遵循先进先出(FIFO)原则,具有阻塞性质,当队列满时,生产者线程会被阻塞...

    北京师范大学数据结构教学资料第3章——栈与队列.ppt

    北京师范大学数据结构教学资料第3章——栈与队列.ppt

    libthread_new.rar_linux 线程池_linux任务队列_线程池

    实现了一个线程池。...在队列和线程池之间创建了一个中间夹层,以提高可移植性。当任务来时,先压入队列,然后唤醒线程执行操作。线程完成任务后,再去队列查询,如果有任务就去执行,没有则阻塞,等待

    并发编程demo测试包含线程池、锁、队列、信号、cas等等

    本测试DEMO涵盖了并发编程的关键组件,包括线程池、锁、队列、信号以及CAS(Compare-and-Swap)操作。下面我们将逐一深入探讨这些知识点。 首先,线程池是管理线程的一种机制,它避免了频繁创建和销毁线程带来的...

    数据结构——队列 求队列长度 C语言

    输入若干个整数, 以0结束, 利用入队的操作生成一个循环队列, 求该队列的长度。

    操作系统原理实验——模拟进程队列的管理(出入队)

    操作系统原理实验——模拟进程队列的管理(出入队) 本实验主要是模拟进程队列的管理,通过C语言编写的源代码,实现了双向链表的出入队管理。下面是对实验的详细解释: 一、实验目的: 本实验的目的是模拟操作系统...

    STL应用专题——栈和队列课件.pptx

    STL 应用专题——栈和队列课件 STL(Standard Template Library)是 C++ 标准库中一个重要的组件,它提供了一些常用的数据结构和算法,为编程提供了便捷的解决方案。 stack 和 queue 是 STL 中的两个重要的容器...

Global site tag (gtag.js) - Google Analytics