- 浏览: 455461 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 LinkedHashSetpubli ...
ArrayList去重 -
飞天奔月:
public static <T> List< ...
ArrayList去重 -
aaron7524:
事务隔离级别 -
月陨殇:
wlh269 写道rswh110 写道lz内容写的不错,就是略 ...
事务隔离级别 -
lnx1824:
我的更奇怪,在本地静态的可以,放jetty里的页面后就不然,都 ...
JS得到上传图片尺寸
ArrayBlockingQueue为阻塞队列,加入和取出元素都是阻塞的!构造方法提供队列的长度
例1:
例2:
例1:
package org.test.concurrent; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class BlockingQueueTest { /** *//** * 定义装苹果的篮子 */ public static class Basket{ // 篮子,能够容纳3个苹果 BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3); // 生产苹果,放入篮子 public void produce() throws InterruptedException{ // put方法放入一个苹果,若basket满了,等到basket有位置 basket.put("An apple"); } // 消费苹果,从篮子中取走 public String consume() throws InterruptedException{ // get方法取出一个苹果,若basket为空,等到basket有苹果为止 return basket.take(); } } // 测试方法 public static void testBasket() { // 建立一个装苹果的篮子 final Basket basket = new Basket(); // 定义苹果生产者 class Producer implements Runnable { public void run() { try { while (true) { // 生产苹果 // System.out.println("生产者准备生产苹果:"+ System.currentTimeMillis()); basket.produce(); System.out.println("生产者生产苹果完毕:" +System.currentTimeMillis()+"篮子里有多少苹果:"+basket.basket.size()); // 休眠300ms Thread.sleep(300); } } catch (InterruptedException ex) { } } } // 定义苹果消费者 class Consumer implements Runnable { public void run() { try { while (true) { // 消费苹果 /*System.out.println("消费者准备消费苹果:" + System.currentTimeMillis());*/ basket.consume(); System.out.println("消费者消费苹果完毕:" + System.currentTimeMillis()+"篮子里有多少苹果:"+basket.basket.size()); // 休眠1000ms Thread.sleep(1000); } } catch (InterruptedException ex) { } } } ExecutorService service = Executors.newCachedThreadPool(); Producer producer = new Producer(); Consumer consumer = new Consumer(); service.submit(producer); service.submit(consumer); // 程序运行5s后,所有任务停止 // service.shutdownNow(); } public static void main(String[] args) { BlockingQueueTest.testBasket(); } }
例2:
package org.test.concurrent; package com.hollyinfo.cuibao.biz; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.hollyinfo.cuibao.logger.HollyinfoLog; import com.hollyinfo.cuibao.logger.HollyinfoLogger; import com.hollyinfo.cuibao.model.Basket; import com.hollyinfo.cuibao.util.SystemParameter; import com.hollyinfo.cuibao.webservice.LogServer; public class BlockingQueueBiz { private static final HollyinfoLog LOG = HollyinfoLogger.getLog(LogServer.class); private static final long serialVersionUID = 1L; //私有的静态的实例 public Basket basket=null; private static BlockingQueueBiz instance = new BlockingQueueBiz(); //私有的构造方法 private BlockingQueueBiz() { basket= Basket.getInstance(); process(); } //公有静态的访问接口,返回当前类的实例 public static BlockingQueueBiz getInstance() { return instance; } public void process() { class Producer implements Runnable { public void run() { while (true) { try { basket.produce("ss"); Thread.sleep(1000); } catch (Exception ex) { ex.printStackTrace(); } } } } class Consumer implements Runnable { public void run() { while (true) { try { String p2=basket.consume(); LogBizImpl.getInstance().SynchLog(SystemParameter.lua_path, p2); Thread.sleep(1000); } catch (Exception ex) { ex.printStackTrace(); } catch (Error ex) { ex.printStackTrace(); } } } } ExecutorService service = Executors.newCachedThreadPool(); Consumer consumer = new Consumer(); service.submit(consumer); Consumer produce = new Consumer(); service.submit(produce); //service.shutdownNow(); } }
发表评论
-
java开发实战视频详解
2017-07-02 08:09 509java开发实战视频详解 链接: http://pan.bai ... -
ArrayList去重
2013-04-25 10:18 3293public static List removeDuplic ... -
java ArrayList 自定义排序
2013-04-22 11:39 2158import java.util.ArrayList; imp ... -
按照指定编码读取配置文件
2012-12-13 10:17 893BufferedReader reader = new Buf ... -
java读取系统编码
2012-12-13 09:45 895public static void main(String[ ... -
Axis2和现有项目的集成
2011-08-11 10:08 1397axis2和现有项目集成 1.下载axis2-1.5-war. ... -
axis2和JDK1.5开发(文件传输服务)详解二(图解)
2010-06-28 16:36 22905.生成webservice服务端代 ... -
产生随机字符串
2010-05-05 17:13 1059import java.util.Random; p ... -
常用IO操作
2009-09-22 13:22 1304例子:写文件,在文件末尾追加文字并且指定输出文件内容字符编码为 ... -
FileChannel锁定文件
2009-09-22 10:52 2413当FileLock fl = fc.tryLock();执行成 ... -
SOCKET 文件传输
2009-09-21 15:47 4248要求将服务端文件夹A下的文件拷贝到客户端文件A下 删除服务端文 ... -
ZIP 压缩 和解压缩
2009-09-21 15:40 1123package com.socket.zip.util; ... -
Oracle number类型查询精度丢失问题
2009-08-21 16:00 6790一、需求中要求查到一个字段的值然后保持小数点后2位 ... -
Oracle number类型数据取出来后四舍五入到小数点后2位
2009-08-19 10:46 8126package com.wlh.test; impo ... -
将汉字编码为unicode
2009-07-28 10:26 886package test; import java. ... -
验证码
2009-07-05 17:29 1281验证servlet: package edu.yale. ... -
java.util.Date对象和String对象转换 SimpleDateFormat
2009-06-30 15:35 3066import java.text.ParseExcept ... -
Socket高级编程 多客户端
2009-06-26 14:03 2564客户端: package com.wlh.test; ... -
进制转换
2009-06-18 12:48 115516进制和字符串之间转换--- import java ... -
bat 命令学习
2009-06-01 23:59 11291.Echo 命令 打开回显或关闭请求回显功能,或显示消 ...
相关推荐
阻塞队列是一种在多线程编程中广泛使用的并发数据结构,它在计算机科学和编程领域,特别是Java和C++等面向对象语言中扮演着重要角色。标题中的“支持多线程和泛型的阻塞队列”意味着我们讨论的是一个能够同时处理多...
Java中的阻塞队列是一种基于同步原语的高级数据结构,它在多线程编程中扮演着重要角色,尤其在并发处理和优化系统资源利用率方面。阻塞队列结合了队列的数据结构与线程同步机制,使得生产者可以在队列满时被阻塞,而...
在Java编程语言中,阻塞队列是一种线程安全的数据结构,它在多线程并发控制中发挥着重要作用。阻塞队列的核心特性是当队列为空时,尝试获取元素的线程会被阻塞,直到其他线程添加元素;同样,当队列满时,试图插入...
线程池和阻塞队列是实现并发的关键组件之一。本文将详细介绍线程池原理、使用场景及注意事项,以及阻塞队列的相关知识。 首先,线程池是一种基于池化思想管理线程的技术,它可以重用一组线程执行多个任务。线程池的...
C++11 实现的阻塞队列 C++11 中的阻塞队列是指在多线程环境下,实现生产者消费者模式的队列。阻塞队列的实现需要解决两个问题:线程安全和阻塞机制。在 C++11 中,我们可以使用 std::mutex、std::condition_...
阻塞队列(BlockingQueue)是一种特殊的队列,它支持两个附加操作:阻塞的插入方法put和阻塞的移除方法take。BlockingQueue继承了Queue接口,是Java 5中加入的。 BlockingQueue常用方法示例: 1. add(E e):添加一...
### BlockingQueue(阻塞队列)详解 #### 一、前言 随着现代软件系统对并发性能需求的不断提高,多线程编程技术逐渐成为开发人员不可或缺的技能之一。在Java平台中,`java.util.concurrent`包提供了丰富的工具来...
在Java编程中,阻塞队列是一种特殊类型的并发数据结构,它在多线程环境中的应用广泛,主要用于线程间的协作通信。阻塞队列在队列满时会阻止生产者线程添加元素,在队列空时会阻止消费者线程取出元素,直到条件满足...
在Java中,阻塞队列(BlockingQueue)是一个很好的实现生产者/消费者模式的工具,而LinkedBlockingQueue则是Java并发包(java.util.concurrent)中提供的一个具体实现。 LinkedBlockingQueue是一个基于链表结构的...
在Java编程中,"并发-线程池和阻塞队列"是两个核心概念,它们在多线程环境下处理任务调度和数据同步方面发挥着重要作用。线程池是一种管理线程资源的有效方式,而阻塞队列则常用于线程间通信和数据共享。 线程池...
### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中`java.util.concurrent`包下提供的一种重要的线程安全队列。它继承自`Queue`接口,并在此基础上...
阻塞队列是Java中并发编程的一个重要组件,它属于Java.util.concurrent包中的一部分。阻塞队列的主要特点在于它支持两个额外的条件操作:当队列为空时,尝试从队列中取元素的操作会被阻塞,直到队列中出现新的元素;...
【Java线程聊天室(阻塞队列实现)】 在Java编程中,多线程是构建并发应用程序的关键技术。在创建一个线程聊天室时,我们通常会涉及到多个线程之间的交互,例如用户发送消息、接收消息以及处理网络通信等。而阻塞...
阻塞队列BlockingQueue是Java并发编程中一个重要的数据结构,它是线程安全的队列,主要用于生产者消费者模型中的数据交换。在Java的`java.util.concurrent`包中,提供了多种实现阻塞队列的类,如`ArrayBlockingQueue...
### 高性能阻塞队列的数据结构创新 #### 一、阻塞队列的概念与应用 **阻塞队列**是一种特殊的队列,它具备线程安全的特点,并且当队列为空时,从队列中获取元素的操作会被阻塞;同样地,当队列满时,向队列中添加...
在Java并发编程中,阻塞队列和阻塞栈是两个重要的并发数据结构,它们在多线程环境下的高效通信和资源管理中扮演着至关重要的角色。这些数据结构源自Java的并发包`java.util.concurrent`,是实现并发设计模式如生产者...
在这个场景中,阻塞队列(BlockingQueue)是实现这种模式的理想工具,因为它提供了线程安全的数据同步机制。 阻塞队列在Java中的实现主要由`java.util.concurrent`包下的几个类提供,如`ArrayBlockingQueue`、`...
Java 阻塞队列(Blocking Queue)是一种特殊类型的并发数据结构,它在多线程编程中扮演着重要的角色。阻塞队列的核心特性在于其在队列为空或满时能够自动阻塞线程,从而实现线程间的同步和通信。这种机制使得生产者...
Java中的阻塞队列是一种特殊的线程安全的数据结构,它在多线程环境下用于高效地处理生产者-消费者问题。阻塞队列的核心特性在于当队列为空时,尝试获取元素的线程会被阻塞,直到队列中有元素可用;同样,当队列满时...
在这篇文档中,我们将详细探讨Java中基于阻塞队列的搜索实例。Java的并发API为我们提供了强大的线程间通信工具,而阻塞队列是这些工具中的核心组件之一。阻塞队列是一个支持两个附加操作的队列:在队列为空时,获取...