- 浏览: 654263 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (153)
- 多线程 (13)
- 数据库连接池 (3)
- maven (9)
- jquery (2)
- struts (5)
- spring (6)
- hibernate (10)
- mybatis (15)
- eclipse插件 (6)
- 短信SI行业 (3)
- oracle数据库 (6)
- junit (1)
- H2数据库 (1)
- sql server 数据库 (2)
- java通讯 (9)
- java序列化与反序列化 (3)
- java分布式缓存 (2)
- 线程池 (3)
- linux系统 (5)
- 企业级问题解决方案 (7)
- JDBC (1)
- uml (2)
- 设计思想与实现 (10)
- 面试 (3)
- ant (2)
- xml (1)
- soa (1)
- 设计模式 (7)
- java垃圾回收机制 (1)
- 工具和框架 (2)
- 其他 (8)
- 程序规范 (1)
- google code 建立svn (1)
- netty (1)
- JPA (1)
- jboss (2)
- RMI (1)
最新评论
-
nnxiaod:
hackpro 写道如果你这里有多个参数,怎么传值了selec ...
MyBatis中Association联合select使用 -
nnxiaod:
引用不管输入参数名称是什么,mybatis最终会执行: 效果为 ...
MyBatis中Association联合select使用 -
a942010:
哪里调用了返回的结果集是menuMap啊?只有后面一点。
MyBatis中Association联合select使用 -
Java-feifeiok:
弄个全点的例子啊!@
MyBatis中Association联合select使用 -
Java-feifeiok:
弄个全点的例子啊
MyBatis中Association联合select使用
线程阻塞队列
文章分类:Java编程
摘自别人,仅供分析
- /*
- 编写一个线程安全、大小固定的队列
- 提供阻塞式的方法put,若队列没有空间,则方法put会一直等待
- 提供阻塞式的方法take,若队列为空,则方法take会一直等待
- 启动30个线程操作该队列,每个线程进行一次put和一次take操作
- */
- /*
- 已经按照顺序获得读锁和写锁了,但是如果启动30个线程的话,基本上每次都会死锁,线程都停在read_lock.wait()的位置,
- 如果启动20个线程就只有一半的几率会死锁(其实都在等待read_lock的锁,不能说是死锁),但每一个线程take一次必然会put一次,
- 或者反过来,按说是不会有都等待read_lock的情况
- */
- package com.huawei.test;
- import java.util.*;
- public class Queue1
- {
- final int SIZE = 10; //队列固定大小
- ArrayList store = new ArrayList(SIZE);
- Object write_lock = new Object();//用于对store的写操作,如get/add/set/remove
- Object read_lock = new Object(); //用于对store只读操作,如取size
- public Queue1(){}
- public void put (Object o) //没有空间一直等待
- {
- while(true){
- synchronized(read_lock){
- try{
- if(store.size() == SIZE){
- read_lock.wait();//如果队列已满,就释放锁
- }else{
- synchronized(write_lock){
- Thread.sleep(50);
- store.add(o); //增加元素到队列
- System.out.println(Thread.currentThread().getName() + "****PUT::Size=" + store.size());
- Thread.sleep(50);
- read_lock.notifyAll(); //通知其他线程
- break;
- }
- }
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
- }
- public Object take () //没有数据一直等待
- {
- while(true){
- synchronized(read_lock){
- try{
- if(store.size() == 0){
- read_lock.wait();//如果队列没有数据,就释放锁
- }else{
- synchronized(write_lock){
- Thread.sleep(50);
- Object obj = store.remove(0); //从队列头移走数据
- System.out.println(Thread.currentThread().getName() + "****Take::Size=" + store.size());
- Thread.sleep(50);
- read_lock.notifyAll();//通知其他线程
- return obj;
- }
- }
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
- }
- public static void main(String[] args){
- Queue1 queue1 = new Queue1(); //创建一个队列
- for(int i = 0; i < 30; i++){ //启动30个线程访问队列
- TestThread thread = new TestThread(queue1,i);
- System.out.println( "--Thread:" + i + " Start!" );
- thread.start();
- try{
- Thread.sleep(10); //没隔十毫秒启动一个线程
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
- }
- class TestThread extends Thread
- {
- Queue1 queue1 = null;
- int sn = 0;
- public TestThread(Queue1 queue1,int sn){
- this.queue1 = queue1;
- this.sn = sn;
- setName("Thread::" + sn); //以序号作为线程名
- }
- public void run(){
- String tmp = null;
- try{
- if( sn < 7){ //sn小于7的线程先put,后take
- tmp = "Thread-PUT::" + sn + "---put::";
- queue1.put(tmp);
- Thread.sleep(10);
- tmp = "Thread-Take::" + sn + "---take::";
- Object obj = queue1.take();
- }else{ //sn大于7的线程先take,后put
- tmp = "Thread-Take::" + sn + "---take::";
- Object obj = queue1.take();
- Thread.sleep(10);
- tmp = "Thread-PUT::" + sn + "---put::";
- queue1.put(tmp);
- }
- System.out.println("Thread::" + sn + " task over!");
- }catch(Exception ex){
- ex.printStackTrace(System.err);
- }
- }
- }
发表评论
-
resetful技术应用框架
2013-04-24 16:47 2700resetful的post 请求发送框架 ... -
Java线程:新特征-阻塞队列
2013-04-16 16:12 1248Java线程:新特征-阻塞队列 阻塞队列是Java5 ... -
disruptor----Concurrent Programming Framework...
2012-09-10 08:57 1515disruptor发布了Java的2.0版本(.Net版 ... -
Lock wait timeout exceeded; try restarting transaction一些信息 .
2012-03-22 09:47 2255锁等待超时。是当前事务在等待其它事务释放锁资源造成的。 ... -
生产者与消费者(买票和卖票多线程协作)
2011-11-02 10:04 1681简单模型: ... -
Lock与synchronized 的区别
2011-11-01 14:12 1414本人摘自:http://houlinyan ... -
Thread守护线程
2011-11-01 11:36 1809在某段程序中看到了Thread.setDaemon的用法,经过 ... -
线程间协作wait()与notify()
2011-11-01 10:40 1167使用wait()与notify()/notifyAll()可以 ... -
sleep()和wait()的区别
2011-11-01 10:27 1159Java中的多线程是一种抢占式的机制而不是分时机制。线程主要 ... -
Thread.sleep使用详解
2011-11-01 10:26 1713我们可能经常会用到 ... -
多线程性能及效率问题
2011-10-13 15:17 11255一、[多线程概要] ... -
java远程通讯可选技术
2011-06-27 16:15 1301原文地址:http://java.chinai ... -
Java序列化(三)之transient
2011-06-27 16:13 14881、java的serialization提供了一个非常棒的存储 ... -
Java序列化(二)
2011-06-27 16:05 10751、序列化是干什么的? 简单说就是为了保存在内存中 ... -
Java序列化(一)
2011-06-27 16:02 1117控制序列化就是有选择的序列化对象,而不是把对象的所以内容都 ... -
线程池与工作队列
2011-05-30 14:00 1158为什么要用线程池? 诸如 Web 服务器、数据库服务器、文件 ... -
长短信实现系列之移动CMPP2.0(转)
2011-05-13 09:41 2534长短信实现系列之 ... -
Socket 长连接与短连接,心跳
2011-04-20 14:04 7585长连接与短连接 所谓长连接,指在一个TCP连接上可以连续 ... -
线程池的介绍及简单实现
2011-04-20 13:35 1145服务器程序利用线程技 ... -
并发性与并行性
2011-04-15 10:14 1564并发性是指两个或多个 ...
相关推荐
globalmousekeyhook InputSimulator
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
基于麻雀搜索算法优化SVR回归预测模型:以身体脂肪含量数据集的精准预测为研究对象,基于麻雀搜索算法优化SVR回归预测模型 输入不限,单输出 数据选用:身体脂肪含量数据集 针对SVR回归预测模型采用麻雀搜索算法 ,基于麻雀搜索算法; SVR回归预测模型优化; 身体脂肪含量数据集; 算法优化SVR模型,基于麻雀搜索算法优化SVR预测身体脂肪含量模型
1、文件内容:perl-Net-DNS-Nameserver-0.72-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Net-DNS-Nameserver-0.72-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:perl-Class-Singleton-1.4-14.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Class-Singleton-1.4-14.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
C++-example-数组奇偶数分离.rar
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
JAVA**
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
自然语言处理导论+网络预览版(张奇)
一个使用 C++ 结合 DeepSeek 相关功能的源码,模拟一个简单的问答场景,使用 DeepSeek 模型来回答用户提出的问题。 实现思路 模型和分词器加载:利用 libtorch 加载 DeepSeek 模型,使用 tokenizers-cpp 加载对应的分词器。 问题处理:对用户输入的问题进行分词和编码,转化为模型可处理的张量形式。 模型推理:将编码后的问题输入到模型中进行推理,获取预测结果。 结果解码:把模型输出的结果解码为可读的文本。 环境准备 安装 PyTorch C++ 库(libtorch):从 PyTorch 官方网站 下载适合你系统的预编译版本。 安装 tokenizers-cpp:可以从其 GitHub 仓库 获取并编译安装。
,三菱FX3U ST语言程序模板 1 程序采用三菱FX3U的PLC编写。 2 触摸屏是台达 3 程序由以下部分组成 3.1 开机准备 3.2 复位 3.3 加热控制 3.4 暂停控制 3.5自动运行 3.6 生产管理 3.7节控制 3.8自动紧急停止 3.9 手动程序 3.10 手动复位 3.11 程序输出 3.12 气缸报警 3.13 密码管理 3.14 辅助控制 如果你是初学者,不建议去看。 如果你有一定的经验,可以更一步的提高技术。 为以后做运控控制卡,运动控制器做好基础。 是一个很不错的程序。
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
JavaEE
1、文件内容:perl-Module-Implementation-0.06-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Module-Implementation-0.06-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:perl-Image-Xbm-1.08-21.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Image-Xbm-1.08-21.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:perl-HTTP-Date-6.02-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-HTTP-Date-6.02-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于FPGA技术的HDMI视频输出实现策略与应用案例分析,基于fpga实现hdmi视频输出的实现 ,基于FPGA; 实现HDMI; 视频输出; 关键技术; 视频处理; 信号转换; 驱动开发,基于FPGA的HDMI视频输出实现技术
"平面磨床电气系统升级:S7-1200 PLC改造的详细方案与解析",No.173 S7-1200 MCGS M7120型平面磨床电气控制系统的PLC改造 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,关键词: S7-1200 PLC; MCGS M7120型平面磨床; 电气控制系统; PLC改造; 梯形图接线图; 原理图图纸; IO分配; 组态画面。,《S7-1200 PLC在M7120型平面磨床电气系统改造中的应用》