`
forhope
  • 浏览: 367207 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

并发线程

 
阅读更多
LinkedBlockingQueue适用于与生产者消费者模式,并可以限制Queue的大小。有以下特点:
1.在入队列时如果队列已满,则线程阻塞,直到队列有空位置。
2.在出队列时如果无数据,则线程阻塞,直到队列中有数据。

public class TestQueue {
	public static void main(String[] args) {
		LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>(1);
		Producer producer1 = new Producer(queue, 1);
		Producer producer2 = new Producer(queue, 2);
		Producer producer3 = new Producer(queue, 3);
		Consumer consumer1 = new Consumer(queue, 1);
		Consumer consumer2 = new Consumer(queue, 2);
		Consumer consumer3 = new Consumer(queue, 3);
		producer1.start();
		producer2.start();
		producer3.start();
		consumer1.start();
		consumer2.start();
		consumer3.start();
	}
}

class Producer extends Thread {
	private static int counter = 0;
	private int id;
	private LinkedBlockingQueue<Integer> productQueue;

	public Producer(LinkedBlockingQueue<Integer> queue, int id) {
		this.productQueue = queue;
		this.id = id;
	}

	public void produce() throws InterruptedException {
		System.out.println("producer " + id + " is waiting for space");
		productQueue.put(++counter);
		System.out.println("producer " + id + " produced: " + counter);
	}

	@Override
	public void run() {
		try {
//			Thread.sleep(5000);
			produce();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

class Consumer extends Thread {
	private int id;
	private LinkedBlockingQueue<Integer> productQueue;

	public Consumer(LinkedBlockingQueue<Integer> queue, int id) {
		this.productQueue = queue;
		this.id = id;
	}

	public void consume() throws InterruptedException {
		System.out.println("consumer " + id + " is waiting for product..." );
		int value = productQueue.take();
		System.out.println("consumer " + id + " consumed: " + value);
	}

	@Override
	public void run() {
		try {
			Thread.sleep(2000);
			consume();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}
分享到:
评论

相关推荐

    调整Tomcat的并发线程

    在调整Tomcat的并发线程数以提高服务器处理并发请求数量的过程中,涉及到多个关键配置,其中最为重要的是server.xml文件的调整。Tomcat的并发能力主要受到maxThreads参数的控制,这是一个设定最大并发处理线程数的...

    32.8、高并发线程1

    【32.8、高并发线程1】讨论的主题是Java中的`ThreadLocal`,它是一种在并发编程中实现线程安全的重要工具。`ThreadLocal`的中文名称为“线程局部变量”,它允许每个线程拥有变量的一个独立副本,确保了在多线程环境...

    C#实现控制线程池最大数并发线程

    在处理高并发任务时,合理控制线程池中的并发线程数量至关重要,以确保系统资源得到充分利用,同时避免过度消耗导致性能瓶颈或崩溃。 在标题和描述中提到的场景,我们需要实现一个功能,即限制线程池中并发执行的...

    高并发线程配置建议-合理配置

    在实际应用中,针对高并发且任务执行时间短的业务,线程池线程数通常设置为CPU核数+1,以减少线程上下文切换的开销。对于并发不高但任务执行时间较长的情况,需要区分任务类型。如果是IO密集型,可以适当增加线程数...

    Qt、C++全栈聊天项目实战,并发线程,网络编程,boost::asio,json,grpc,protobuf,qt,mysql

    并发线程,网络编程,boost::asio,json,grpc,protobuf,qt,mysql,redis 等多种技术综合应用 2 项目运行 GateServer vs VerifyServer vscode,cmd 注意先 .\redis-server.exe .\redis.windows.conf 运行 ...

    C++ 聊天项目实战案例,涵盖grpc,并发线程,网络编程,qt开发,数据库等多种技术综合应用

    C++ 聊天项目实战案例,涵盖grpc,并发线程,网络编程,qt开发,数据库等多种技术综合应用

    IOS 创建并发线程的实例详解

    IOS 创建并发线程的实例详解 创建并发线程  主线程一般都是处理UI界面及用户交互的事儿的。其他的事一般就要另外的线程去处理,如下载,计算等。。。 现在先简单创建3个线程,分别打印出1-1000,,为了方便,线程3...

    java多线程并发编程例子

    6. **Semaphore**:信号量是一个控制同时访问特定资源的线程数量的工具,可以用来限制并发线程数。`TestSemaphore.java`可能包含了如何使用`Semaphore`来限制系统资源(如数据库连接)的并发访问。 7. **FutureTask...

    java多线程与并发1

    3. 管程:Java中的Semaphore、CountDownLatch、CyclicBarrier等同步工具,用于控制并发线程的数量或协调线程执行。 三、并发容器 1. 原生容器:ArrayList、LinkedList等不保证线程安全,而Vector、Stack则是线程...

    Java 模拟线程并发

    Java 模拟线程并发是编程领域中的一个重要概念,尤其在多核处理器和高并发应用中,理解并熟练掌握线程并发技术对于提升程序性能至关重要。在Java中,线程并发可以通过多种方式实现,包括继承Thread类、实现Runnable...

    java并发编程与高并发处理.xmind

    java并发编程总结,为xmind格式,总结的很详细,包含常见的并发容器,锁等知识

    人工智能-项目实践-多线程-Java多线程高并发实例.zip

    通过线程池,我们可以限制并发线程的数量,避免过度消耗系统资源。 2. **并发容器**:Java的`ConcurrentHashMap`、`CopyOnWriteArrayList`等并发容器提供线程安全的数据结构,使得多个线程可以安全地共享数据,而...

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现

    在C#编程中,线程管理是一...这种方式有效地限制了并发线程数量,防止系统资源过度消耗,同时保证了程序的稳定性和数据的一致性。在asp.net或其他多线程应用中,这样的设计模式对于管理和优化系统性能是非常有价值的。

    并发服务器-多线程服务器详解

    ### 并发服务器—多线程服务器详解 #### 一、引言 在现代软件开发中,特别是网络应用和服务的设计中,对并发处理能力的需求日益增长。为了满足高并发访问的需求,开发人员常采用多线程技术来构建高效、响应迅速的...

    软件性能测试并发数量计算公式(整理)

    软件性能测试计算公式(整理)术语及缩写词测试时间:一轮测试从开始到结束所使用的时间并发线程数:测试时同时访问被测系统的线程数。注意,由于测试过程中,每个线程都是以尽可能快的速度发请求,与实际用户的使用有...

Global site tag (gtag.js) - Google Analytics