- 浏览: 145572 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
trydofor:
fujohnwang 写道为啥不是maven的问题?大概是因为 ...
jdk1.6.0_16 小bug -
fujohnwang:
为啥不是maven的问题?
jdk1.6.0_16 小bug -
trydofor:
参考资料http://supermmx.org/blog/20 ...
必须知道,别滥用-finally -
trydofor:
后续跟踪:使用javap分析finally块中return值h ...
必须知道,别滥用-finally -
trydofor:
(2)javap -c TestFor(1)javap -c ...
while(ture) 和 for(;;)
以下代码,没实际意义。
注意以下情况的不同点。
1)volatile 和 Atomic*
* private volatile long unusedAmount = 0;
* private final AtomicLong unusedAmount = new AtomicLong();
* private long unusedAmount = 0;
2)作用域及异常
* nextA1()
* nextA2()
* nextB1()
* nextB2()
注意以下情况的不同点。
1)volatile 和 Atomic*
* private volatile long unusedAmount = 0;
* private final AtomicLong unusedAmount = new AtomicLong();
* private long unusedAmount = 0;
2)作用域及异常
* nextA1()
* nextA2()
* nextB1()
* nextB2()
import java.util.LinkedList; import java.util.Random; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /** * @author : Shi Rongjiu (www.trydofor.com) */ public class ThinkingInSync { private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); private final Lock rLock = rwLock.readLock(); private final Lock wLock = rwLock.writeLock(); // sync private final LinkedList<Integer> readWriteBox = new LinkedList<Integer>(); private volatile long unusedAmount = 0; private volatile Integer currentValue = null; //private final AtomicLong unusedAmount = new AtomicLong(); // 1 //private long unusedAmount = 0; // 2 // private final Random random = new Random(); private final AtomicInteger counter = new AtomicInteger(0); public Integer nextA1() throws InterruptedException, TimeoutException { wLock.lock(); try { if (readWriteBox.size() <= 0) { syncLoad(); unusedAmount = readWriteBox.size(); } currentValue = makeValue(); unusedAmount--; } finally { wLock.unlock(); } return currentValue; } public Integer nextA2() throws InterruptedException, TimeoutException { wLock.lock(); try { if (readWriteBox.size() <= 0) { syncLoad(); unusedAmount = readWriteBox.size(); } currentValue = makeValue(); unusedAmount--; return currentValue; } finally { wLock.unlock(); } } public Integer nextB1() throws InterruptedException, TimeoutException { wLock.lock(); try { if (readWriteBox.size() <= 0) { syncLoad(); unusedAmount = readWriteBox.size(); } unusedAmount--; currentValue = makeValue(); return currentValue; } finally { wLock.unlock(); } } public Integer nextB2() throws InterruptedException, TimeoutException { wLock.lock(); Integer result = null; long varUnused = unusedAmount; try { if (readWriteBox.size() <= 0) { syncLoad(); varUnused = readWriteBox.size(); } result = makeValue(); varUnused--; } finally { unusedAmount = varUnused; currentValue = result; wLock.unlock(); } return result; } public Integer current() { rLock.lock(); try { return currentValue; } finally { rLock.unlock(); } } public long remains() { rLock.lock(); try { return unusedAmount; } finally { rLock.unlock(); } } //------------------------------- private Integer makeValue() throws InterruptedException, TimeoutException { randomEvent(); return readWriteBox.isEmpty() ? null : readWriteBox.removeFirst(); } private int syncLoad() throws InterruptedException, TimeoutException { int sleep = randomEvent(); readWriteBox.add(counter.incrementAndGet()); int count = 1; if (sleep % 2 == 0) { count++; readWriteBox.add(counter.incrementAndGet()); } if (sleep % 3 == 0) { count++; readWriteBox.add(counter.incrementAndGet()); } return count; } private int randomEvent() throws InterruptedException, TimeoutException { int sleep = random.nextInt(); if (sleep > 10000) { Thread.sleep(5000); throw new TimeoutException(); } else if (sleep < 100) { Thread.currentThread().interrupt(); throw new InterruptedException(); } else { Thread.sleep(sleep); } return sleep; } }
发表评论
-
Java 大括号语法糖
2012-07-04 16:53 1847Java 大括号语法糖 Java 的大括号(‘{’ ,curl ... -
jdk1.6.0_16 小bug
2011-06-01 17:10 2231汉语错误信息: [ERROR] \a9zones\a9id- ... -
JSR305 有助于提高代码健壮性
2011-05-18 16:44 2110JSR305 有助于提高代码健壮性 下载(java5+ ,据 ... -
Java常用工具类 -- ALOE 芦荟工程
2011-05-10 15:32 1279最牛全角互转半角 ... -
不可 T extends Iterator<E> & Iterable<E>
2011-05-09 10:50 1237//(a) public <T extends I ... -
必须知道,别滥用-finally
2011-04-21 10:57 1359public class Test { ... -
while(ture) 和 for(;;)
2011-03-28 11:10 1164多线程下的if,经常是while(...) 对于死等,在jdk ... -
小细节导致假调用
2011-03-17 11:40 841private final A9Loader< ... -
Number 为何不 Comparable
2011-02-18 09:55 1155现状 java 5+ package java.lang. ... -
synchronized 处发生了什么
2011-01-13 14:45 748问题 1.为何 map.clear(); 时的输出的毫秒数不连 ... -
讨论下 A9ID/A9IC 的短板
2011-01-12 16:21 832ID 生成策略,是各有各的道。且不问是否分布,多进程,多线程。 ... -
A9ID/A9IC
2011-01-12 09:35 970第一版的A9ID 和A9IC已经出炉了. 定义如下 ... -
文字替换之效率
2010-11-02 10:40 11011. 常用方法 a) public String repl ... -
遍历 List 之效率
2010-11-02 09:30 12621. 常用遍历 List 之方法 遍历 List 方法 ... -
JAVA乱码你知道(DIY)
2010-11-01 13:45 9821. 四个涉及编码的环节 java开发中的乱码问题,有 ... -
超级基础:作用范围和生命周期
2010-10-30 14:29 744代码中的类或变量: 1。一旦创建了,就不在需要了。 ... -
码工考古之DataSync
2010-06-19 20:50 976码工考古之DataSync 作者:臭豆腐[trydo ... -
IVY+IVYDE 非经典实践
2010-06-07 22:15 1063http://trydofor.com/a9w3-auhome ... -
日文编码SHIFT_JIS/MS932使用
2010-04-16 13:38 3767总结:在多数情况下,使用MS932代替SHIFT_JIS,可减 ... -
Build Spring3 惊喜手记
2009-12-21 20:29 1988原版地址:http://www.trydofor.com/a9 ...
相关推荐
if (write_pid() ) //避免同时有多个该程序在运行 return -1; if (pipe(fd1) ) { perror("pipe failed"); exit(-1); } if (s_pipe(fd2) ) { perror("pipe failed"); exit(-1); } int port = atoi(argv...
GIL介绍GIL与LockGIL与多线程Python 直接赋值、浅拷贝、深拷贝私有属性魔法方法属性访问控制描述符对像构造自定义容器上下文管理对象的序列化运算符相关的魔术方法比较运算符一元运算符和函数算术运算符反算术运算符...
修改高级表格支持库,解决在鼠标按下和抬起之间收到时钟周期事件的情况下,无法收到“被单击”事件的BUG。 3. 修改扩展界面支持库三,解决单击卷帘菜单后导致日期框不能弹出下拉窗口的BUG。 4. 修改XP风格支持库...
线程安全 高级正则表达式 新字符串命令 dde扩展模块 杂类 第53章 tcl/tk 8.2 trf补丁 更快的字符串操作 空数组名 浏览器插件的兼容性 第54章 tcl/tk 8.3 关于tcl的修改建议 关于tk的改动建议 第55章...
映射属性,映射关系,插入差异,删除和更新差异通常是在应用程序之间不变的任务。 考虑到这一点,我们面临着将其抽象到库中的挑战。 Sync使用Core Data模型的知识来推断JSON和Core Data之间的所有映射,一旦使用它...
.net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库 SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下...
<<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 ... 14.2 多 态 性 .159 ... 比尔....这一天 微软公司正式推出了其下一代...
但是,由于各国对Windows操作系统提供了越来越多的支持,因此就更加容易为国际市场生产各种应用软件,从而缩短了软件的美国版本与国际版本推出的时间间隔。 Windows操作系统始终不逾地提供各种支持,以帮助软件开发...
Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,...
Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,...
i++){ //运行老久,减少循环次数会快很多,只是精确度小些 pi += (fenZi/fenMu) ; fenZi *= -1.0; //每项分子的变化是+4,-4,+4,-4 .... fenMu += 2.0; //分母的变化是1,3,5,7, .... 每项递加2 } ...