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的并发线程数以提高服务器处理并发请求数量的过程中,涉及到多个关键配置,其中最为重要的是server.xml文件的调整。Tomcat的并发能力主要受到maxThreads参数的控制,这是一个设定最大并发处理线程数的...
【32.8、高并发线程1】讨论的主题是Java中的`ThreadLocal`,它是一种在并发编程中实现线程安全的重要工具。`ThreadLocal`的中文名称为“线程局部变量”,它允许每个线程拥有变量的一个独立副本,确保了在多线程环境...
在处理高并发任务时,合理控制线程池中的并发线程数量至关重要,以确保系统资源得到充分利用,同时避免过度消耗导致性能瓶颈或崩溃。 在标题和描述中提到的场景,我们需要实现一个功能,即限制线程池中并发执行的...
在实际应用中,针对高并发且任务执行时间短的业务,线程池线程数通常设置为CPU核数+1,以减少线程上下文切换的开销。对于并发不高但任务执行时间较长的情况,需要区分任务类型。如果是IO密集型,可以适当增加线程数...
并发线程,网络编程,boost::asio,json,grpc,protobuf,qt,mysql,redis 等多种技术综合应用 2 项目运行 GateServer vs VerifyServer vscode,cmd 注意先 .\redis-server.exe .\redis.windows.conf 运行 ...
C++ 聊天项目实战案例,涵盖grpc,并发线程,网络编程,qt开发,数据库等多种技术综合应用
IOS 创建并发线程的实例详解 创建并发线程 主线程一般都是处理UI界面及用户交互的事儿的。其他的事一般就要另外的线程去处理,如下载,计算等。。。 现在先简单创建3个线程,分别打印出1-1000,,为了方便,线程3...
6. **Semaphore**:信号量是一个控制同时访问特定资源的线程数量的工具,可以用来限制并发线程数。`TestSemaphore.java`可能包含了如何使用`Semaphore`来限制系统资源(如数据库连接)的并发访问。 7. **FutureTask...
3. 管程:Java中的Semaphore、CountDownLatch、CyclicBarrier等同步工具,用于控制并发线程的数量或协调线程执行。 三、并发容器 1. 原生容器:ArrayList、LinkedList等不保证线程安全,而Vector、Stack则是线程...
Java 模拟线程并发是编程领域中的一个重要概念,尤其在多核处理器和高并发应用中,理解并熟练掌握线程并发技术对于提升程序性能至关重要。在Java中,线程并发可以通过多种方式实现,包括继承Thread类、实现Runnable...
java并发编程总结,为xmind格式,总结的很详细,包含常见的并发容器,锁等知识
通过线程池,我们可以限制并发线程的数量,避免过度消耗系统资源。 2. **并发容器**:Java的`ConcurrentHashMap`、`CopyOnWriteArrayList`等并发容器提供线程安全的数据结构,使得多个线程可以安全地共享数据,而...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
在C#编程中,线程管理是一...这种方式有效地限制了并发线程数量,防止系统资源过度消耗,同时保证了程序的稳定性和数据的一致性。在asp.net或其他多线程应用中,这样的设计模式对于管理和优化系统性能是非常有价值的。
### 并发服务器—多线程服务器详解 #### 一、引言 在现代软件开发中,特别是网络应用和服务的设计中,对并发处理能力的需求日益增长。为了满足高并发访问的需求,开发人员常采用多线程技术来构建高效、响应迅速的...
软件性能测试计算公式(整理)术语及缩写词测试时间:一轮测试从开始到结束所使用的时间并发线程数:测试时同时访问被测系统的线程数。注意,由于测试过程中,每个线程都是以尽可能快的速度发请求,与实际用户的使用有...