- 浏览: 89552 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ssy341:
说的简单了点,和官网的文档差不多,多文件上传也不是很好,不过可 ...
jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能 -
蓝凝幽偌:
有没有jar包?
org.apache.commons.net.ftp.FTPClient 的简单用法 -
tinguo002:
在这里缓缓走过,很为楼主钻研精神感动,也感谢楼主分享。
关于Struts2资源文件的配置
由于LinkedBlockingQueue 实现是线程安全的,实现了先进先出等特性,是作为生产者消费者的首选,LinkedBlockingQueue 可以指定容量,也可以不指定,不指定的话,默认最大是Integer.MAX_VALUE,其中主要用到put和take方法,put方法在队列满的时候会阻塞直到有队列成员被消费,take方法在队列空的时候会阻塞,直到有队列成员被放进来。下面是一个例子,一看就明白了。
package com.spell.designPattern.producer_consumer;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
/**
* 生产者类,任务是产生个uuid放在队列中
*
* @author Administrator
*
*/
public class Producer implements Runnable {
private BlockingQueue<String> queue;
public Producer(BlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
String uuid = UUID.randomUUID().toString();
try {
queue.put(uuid);
System.out
.println(Thread.currentThread() + " produce uuid:" + uuid);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
package com.spell.designPattern.producer_consumer;
import java.util.concurrent.BlockingQueue;
/**
* 消费者队列,任务是取得队列中的uuid打印下
*
* @author Administrator
*
*/
public class Consumer implements Runnable {
private BlockingQueue<String> queue;
public Consumer(BlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
String uuid = queue.take();
System.out
.println(Thread.currentThread() + " consume uuid:" + uuid);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
package com.spell.designPattern.producer_consumer;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 测试类
*
* @author Administrator
*
*/
public class Tester {
public static void main(String[] args) throws InterruptedException {
// 队列
LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(10);
// 生产者一号
Producer producer = new Producer(queue);
// 生产者二号
Producer producer2 = new Producer(queue);
// 消费者
Consumer consumer = new Consumer(queue);
for (int i = 0; i < 15; i++) {
new Thread(producer).start();
}
for (int i = 0; i < 15; i++) {
new Thread(producer2).start();
}
for (int i = 0; i < 30; i++) {
new Thread(consumer).start();
}
}
}
package com.spell.designPattern.producer_consumer;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
/**
* 生产者类,任务是产生个uuid放在队列中
*
* @author Administrator
*
*/
public class Producer implements Runnable {
private BlockingQueue<String> queue;
public Producer(BlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
String uuid = UUID.randomUUID().toString();
try {
queue.put(uuid);
System.out
.println(Thread.currentThread() + " produce uuid:" + uuid);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
package com.spell.designPattern.producer_consumer;
import java.util.concurrent.BlockingQueue;
/**
* 消费者队列,任务是取得队列中的uuid打印下
*
* @author Administrator
*
*/
public class Consumer implements Runnable {
private BlockingQueue<String> queue;
public Consumer(BlockingQueue<String> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
String uuid = queue.take();
System.out
.println(Thread.currentThread() + " consume uuid:" + uuid);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
package com.spell.designPattern.producer_consumer;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 测试类
*
* @author Administrator
*
*/
public class Tester {
public static void main(String[] args) throws InterruptedException {
// 队列
LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(10);
// 生产者一号
Producer producer = new Producer(queue);
// 生产者二号
Producer producer2 = new Producer(queue);
// 消费者
Consumer consumer = new Consumer(queue);
for (int i = 0; i < 15; i++) {
new Thread(producer).start();
}
for (int i = 0; i < 15; i++) {
new Thread(producer2).start();
}
for (int i = 0; i < 30; i++) {
new Thread(consumer).start();
}
}
}
发表评论
-
java编程思想final的理解
2015-03-06 13:38 381根据上下文环境,java的关键字final也存在着细微的区别, ... -
PDF2SWF中文字符集解决方案
2014-02-26 15:12 829转自:http://www.cnblogs.com/liver ... -
Runtime.getRuntime().exec() 输出流阻塞的解决方法
2014-02-26 09:40 1879转自:http://blog.csdn.net/xiaoani ... -
笔记(不用老搜索了)
2013-07-17 16:16 0下面代码则执行了subgo()函数, <a href ... -
加密123
2013-05-08 22:35 863/** * 加密传输时的密码 * @author weirhp ... -
jsoup解析
2013-04-28 15:31 714http://www.ibm.com/developerwor ... -
java线程管理利器:java.util.current的用法举例
2012-12-05 15:42 1009DK5中增加了Doug Lea的并发库,这一引进给java线程 ... -
Tomcat - 解决which must be escaped when used within the value错误
2012-11-19 15:17 655http://www.cnblogs.com/javadu/a ... -
Java POI Word 写文档
2012-11-09 09:19 8761 package apache.poi; 2 3 ... -
使用COS组件实现文件上传
2012-06-15 11:25 1519转自:http://blog.csdn.net/jadyer/ ... -
Java Annotation(1)
2011-06-19 09:48 665作者:曾巧(numenzq) 摘要 Annotation( ... -
关于request得到路径的几种方法
2011-06-08 15:43 944request.getRequestURI() /jque ... -
JAVA EXCEL API 简介
2011-04-18 16:32 722转自:http://www.ibm.com/dev ... -
Hibernate 多对多双向关联
2011-03-21 11:09 620Hibernate 多对多双向关联 一、模型介绍 多个 ... -
Hibernate 一对多连接表双向关联
2011-03-21 11:09 767Hibernate 一对多连接表双向关联 一、模型介绍 ... -
Hibernate 一对多外键双向关联
2011-03-21 11:08 817Hibernate 一对多外键双向关联 一、模型介绍 ... -
Hibernate 一对一主键双向关联
2011-03-21 11:07 757Hibernate 一对一主键双向关联 一对一主键映射在一 ... -
Hibernate 一对一外键双向关联
2011-03-21 11:07 648Hibernate 一对一外键双向关联 一对一外键关联是一 ... -
Hibernate 多对多单向关联
2011-03-21 11:06 642Hibernate 多对多单向关联 一、模型介绍 多个人( ... -
Hibernate 多对一连接表单向关联
2011-03-21 11:05 714Hibernate 多对一连接表单向关联 一、模型介绍 ...
相关推荐
总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...
总之,多生产者-多消费者模式是并发编程中的重要设计模式,通过合理利用同步机制,能够有效地解决线程间的通信问题,提高系统的并发性能。在Java中,我们可以借助`BlockingQueue`等工具实现这一模式,从而构建高效、...
在Java中,阻塞队列(BlockingQueue)是一个很好的实现生产者/消费者模式的工具,而LinkedBlockingQueue则是Java并发包(java.util.concurrent)中提供的一个具体实现。 LinkedBlockingQueue是一个基于链表结构的...
"生产者-消费者"模型是多线程问题中的经典案例,它揭示了如何通过线程间的协作来实现数据共享和高效利用资源。今天我们将深入探讨这个主题。 生产者-消费者模型是由两个主要角色构成:生产者和消费者。生产者负责...
在Java中,`BlockingQueue`接口是实现生产者消费者模式的理想选择。`BlockingQueue`提供了线程安全的队列操作,并且内置了阻塞机制。当队列满时,`put()`方法会使得生产者线程自动阻塞,直至队列有空位;当队列空时...
Java的并发集合框架提供了`BlockingQueue`接口,它内置了线程安全性和阻塞行为,非常适合实现生产者-消费者模式。`BlockingQueue`有多个实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等,它们自动处理阻塞...
通过理解并熟练运用生产者-消费者模式,开发者可以构建高效、可靠的多线程应用,处理并发问题,并优化系统资源的利用率。在Java中,这一模式的应用不仅限于简单的队列操作,还可以扩展到更复杂的并发场景,如分布式...
生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...
总结,Java实现的生产者消费者模式利用`BlockingQueue`接口来协调生产者和消费者的动作,确保资源的有效管理和合理分配。通过这种方式,我们可以构建高效、稳定且线程安全的并发程序。在`src`文件夹中,可能包含的是...
在实际的Java并发编程中,通常使用`BlockingQueue`接口及其实现(如`ArrayBlockingQueue`或`LinkedBlockingQueue`)来实现生产者-消费者模式。这些队列具有内置的线程同步机制,能够自动处理生产者和消费者的等待与...
Java多线程编程是开发高...总结一下,Java中的生产者消费者模式利用了`BlockingQueue`等并发工具,实现了线程间的同步和协作,提高了程序的并发性能。理解并熟练运用这种模式,对于提升Java多线程编程的能力至关重要。
4. `mine`目录下的源代码可能包含了作者自定义的生产者和消费者类,展示了如何利用`BlockingQueue`实现具体业务场景下的生产者消费者模式。 5. `create`目录下的源代码可能提供了另一种实现方式,可能包括不同的...
生产者/消费者模型是多线程编程中的一个经典设计模式,它有效地利用了资源,避免了数据竞争和阻塞问题。这个模型的核心思想是将生产者和消费者分隔开,使得生产者可以专注于创建产品,而消费者则专注于消耗这些产品...
Java中实现生产者消费者模型通常会用到以下关键概念和技术: 1. **阻塞队列(BlockingQueue)**:这是生产者消费者模型的核心组件,用于存储待消费的数据。Java的`java.util.concurrent`包提供了多种阻塞队列实现,...
在Java中,我们可以利用`java.util.concurrent`包中的工具类来实现生产者消费者模式。其中,`BlockingQueue`接口是一个理想的候选,因为它提供了线程安全的数据结构,可以用于线程间的同步。`BlockingQueue`有多种...
在Java中,`ArrayBlockingQueue`或者`LinkedBlockingQueue`是实现生产者消费者模型的常见选择,因为它们都提供了内置的线程安全机制。`put()`方法用于生产者添加产品,`take()`方法用于消费者取出产品。 在实际应用...
在Java中,`BlockingQueue`接口是实现生产者消费者模式的关键组件。它提供了一种线程安全的数据结构,允许线程在尝试插入或删除元素时自动进行阻塞,直到操作可以执行。例如,`ArrayBlockingQueue`或`...
理解并实现生产者-消费者模式对于Java程序员来说至关重要,因为它能够帮助我们构建高效、可扩展的并发应用程序。通过熟练掌握这种模式,开发者可以在面临大量并发任务时,更好地管理资源,提高系统性能。
以下是一个简单的Java生产者消费者模型的代码示例: ```java import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class ProducerConsumerExample { public ...