@mitisky
入队列enq 是一个cas操作,如果加入队列成功,会立即进行队列自旋操作,在这个操作里面尝试获取锁。
参考:
http://www.blogjava.net/xylz/archive/2010/07/07/325410.htmlacquirequeued(node,arg)
re: 捕获java线程池执行任务抛出的异常 imxylz 2015-05-13 10:37
@liubey
友好的做法是子线程不抛出异常,返回不同的结果,或者将异常封装到return对象中。父对象根据此结果/异常封装友好的提示给界面。
imxylz 2014-08-08 10:13
@vanjayzhou
cas的cpu原语保证a修改时,t2修改会失败。所以t2才需要循环操作,直到成功。
imxylz 2014-07-03 15:06
jdk6以后对synchronized进行了很多优化,而lock基本上没有什么可优化的空间。在某些操作系统和jdk实现上,这种简单的测试结果可能都不一样。但通常情况下,高并发和长时间任务执行上,lock的性能比synchronized的更优。
imxylz 2014-06-19 13:24
@徐敏
锁数据结构的实现,便于程序开发。锁也是基于cas原子操作实现的,但是cas难以使用。
imxylz 2014-05-08 11:56
@nemo
当提交一个任务时,如果需要创建一个线程(何时需要在下一节中探讨)时,就调用线程工厂创建一个线程,同时将线程绑定到worker工作队列中。
线程池有两个核心变量:corepoolsize与maximumpoolsize。
下一页描述的比较详细:
imxylz 2014-04-02 11:28
@laobailong
建议你学习下final的语法和用途
imxylz 2014-02-27 20:45
@程序员
网站不错。我当年是为了搜索本地,我们自己的类而使用的。我们最开始一直用ant,没有使用maven,主要是我们内网无法上外网。
imxylz 2014-02-24 20:41
@vikiya
邮件回复吧
imxylz 2014-02-24 10:09
@tpb
sorry for delay
imxylz 2014-02-24 10:07
@newsame
@alec
@小蚂蚁
@小宝
@forexi
@ymsfd
@jeridge
已发送
imxylz 2014-02-24 10:05
@ymsfd
不好,google 吧。
imxylz 2014-02-20 13:35
@chenhb
难道是新版本eclipse插件?
选择1:无视它,eclipse的程序启动参数加入自定义即可
选择2:使用5.5.0版本
imxylz 2014-02-17 20:35
@张云路
不知,个人没觉得有太大变化。
imxylz 2014-02-05 13:11
@avan
@leo
@miccie
@javaworld
@jaychang
@mgcnrx11
@alex
@dada
都已经发送了
imxylz 2013-11-15 19:29
@darrenlee
我直接把这些都删掉了,怪不得没看到,太恶心了~~~
imxylz 2013-11-15 00:15
@dizzyangel
@libratears
@麒程
@sam
可以继续使用3.3 版本的,此版本一直能使用。
3.4 (2013)版本暂时不能公开,得让人家售卖一段时间吧。
imxylz 2013-11-06 20:16
@melin
目前只在北京招聘,如果有理想冲动,地域应该不是问题
@zqh
不限条件,只需一份简历即可,当前前提是自己觉得值得尝试下。
imxylz 2013-11-02 13:57
@water
imxylz 2013-11-02 13:56
@反反复复
re: java 8 入门/新特性 imxylz 2013-10-16 10:46
@unmi
非常棒,有深度有真相
imxylz 2013-08-26 15:53
@christine
需要将jrebel.lic 放入~/.jrebel/ 目录中
imxylz 2013-02-19 14:25
@crystal
share the files.
imxylz 2013-02-19 14:25
@woodx99
share the files.
imxylz 2013-01-16 10:13
既然是非线程安全的代码,必然需要同步,这样多线程执行和单线程没有分别。改写代码为线程安全才是正确的道理。
实在没有办法,应该降低handlebusiness里面的锁的粒度,最终需要同步的逻辑越少越好。
imxylz 2012-11-01 14:08
@icanfly#lpnote.com
@girltoyou#gmail.com
@lrenveng#gmail.com
@69202158#qq.com
@iacts29#nate.com
@okok800#gmail.com
@inaquer01#gmail.com
@s870289#yahoo.com.tw
the new packages were sent.
imxylz 2012-08-21 16:22
@newlife
我就花了三个小时,人家挺厚道的,没有使用混淆机制。大度~
imxylz 2012-08-21 12:54
@newlife
@enchanter
@ygbx5174
@kafei
@footway
@sprnza
@ifans
@jack
@summer
@xmind fans
@shmily
@shen
@aoi
多谢各位的厚爱,由于现在的破解都是无限制版,太坑人家了,毕竟人家一个团队为此付出了很大的努力。
我争取尽快出一个时间限制版,这样能够在短时间保护一下人家的利益。
imxylz 2012-07-06 14:36
@fangfang
已发送
imxylz 2012-07-05 18:11
@vivi
已发送
imxylz 2012-05-18 15:55
or
or
imxylz 2012-05-17 18:51
@乐百事
已经提交到maven中央仓库
imxylz 2012-05-08 10:25
@imxylz
@红泪
上面的回答可能不够正确 有空我在写一篇文章吧
imxylz 2012-05-07 11:36
@红泪
理论上讲如果在释放节点的时候其他所有节点都没有被中断(也就是节点没有被cancelled),那么就应当唤醒头节点的下一个有效节点(头节点是傀儡节点),也就是从head往后寻找有效继任节点。
但是我们知道所有调用了lock()/trylock(long time, timeunit unit)的线程可能会被中断,这时候已经进入chl队列的节点node就会被cancelled,也就是会移出队列。
而移出队列的逻辑有点复杂,有空我单独写一篇文章。
简单说就是用被移出节点node的继任节点next替换前任有效节点的next。
用代码描述就是java.util.concurrent.locks.abstractqueuedsynchronizer.cancelacquire(node):
node=cancelled_node;
cas(node.pre.next,node,node.next);
并且将node.next指向node,也就是node没有继任节点了,但是不修改前任节点。
也就是说如果从后tail往前遍历到被删出节点node时,根据node.pre可以继续往前移动,直到移动到head为止。
如果要想从head往后遍历,那么代码逻辑就是:
node = cancelled_node;
cas(node.next.pre,node,node.pre);
这两处的逻辑差别在于,由于存在一个傀儡节点(head),因此节点node.pre总是存在的,处理起来稍微容易点。
imxylz 2012-04-10 14:27
@吴波
这段话的意思是说,trylock(long timeout,timeunit unit)是定时获取公平锁,不会被"闯入"从而破坏公平性(指进入队列的顺序),而trylock()却是非公平获取锁方式,这回破坏公平性。
--------------
如果要想实现一个允许"闯入"破坏公平性的定时trylock(),换句话说既想使用“闯入”提高性能,同时又想有超时特性(定时),那么可以使用下面的组合:
================
if (lock.trylock() || lock.trylock(timeout, unit) ) { ... }
================
补充代码:
================
public boolean trylock() {
return sync.nonfairtryacquire(1);
}
--------------
public boolean trylock(long timeout, timeunit unit) throws interruptedexception {
return sync.tryacquirenanos(1, unit.tonanos(timeout));
}