Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7596551 建立时间:2006年5月29日 |

| |
[J2SE]JDK5新特性--java.util.concurrent CyclicBarrier(3) 软件技术
lhwork 发表于 2006/12/11 11:15:57 |
在实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行。
比如有几个旅行团需要途经深圳、广州、韶关、长沙最后到达武汉。旅行团中有自驾游的,有徒步的,有乘坐旅游大巴的;这些旅行团同时出发,并且每到一个目的地,都要等待其他旅行团到达此地后再同时出发,直到都到达终点站武汉。
这时候CyclicBarrier就可以派上用场。CyclicBarrier最重要的属性就是参与者个数,另外最要方法是await()。当所有线程都调用了await()后,就 |
|
[J2SE]JDK5新特性--java.util.concurrent BlockingQueue(4) 软件技术
lhwork 发表于 2006/12/11 11:15:33 |
并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列。该类主要提供了两个方法put()和take(),前者将一个对象放到队列中,如果队列已经满了,就等待直到有空闲节点;后者从head取一个对象,如果没有对象,就等待直到有可取的对象。
下面的例子比较简单,一个读线程,用于将要处理的文件对象添加到阻塞队列中,
另外四个写线程用于取出文件对象,为了模拟写操作耗时长的特点,特让线程睡眠一段随机长度的时间。另外,该Demo也使用到了线程池和原子整型
(AtomicInteger),AtomicInteger可以在并发情况下达到原子化更新,避免使用了synchronized,而且性能非常高。由
|
|
[J2SE]JDK5新特性--java.util.concurrent CountDownLatch(5) 软件技术
lhwork 发表于 2006/12/11 11:14:00 |
从名字可以看出,CountDownLatch是一个倒数计数的锁,当倒数到0时触发事件,也就是开锁,其他人就可以进入了。在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。
CountDownLatch最重要的方法是countDown()和await(),前者主要是倒数一次,后者是等待倒数到0,如果没有到达0,就只有阻塞等待了。
一个CountDouwnLatch实例是不能重复使用的,也就是说它是一次性的,锁一经被打开就不能 |
|
[算法]排序算法 软件技术
lhwork 发表于 2006/12/11 11:03:29 |
得2004年,我用c++按照算法书上介绍,实现了一些算法,比如排序、查
找、二叉树、AVL、红黑树等。那些代码随着一次次的搬家也不知所踪,也许在原来公司的产品中有它的身影吧。前几天,无聊时翻出了《编程珠玑》这本书,是
一本非常经典的算法书。该书只有200页,花一个下午就能看完大部分内容,还是很值得的。
现在在使用Java语言,也许用Java实现一些算法也是一件很有趣的事情哦。也算是温故而知新吧。
首先还是实现一些简单的排序算法吧。为了简单起见,只实现了升序排序。在我的机器上用QuickSort排序100万个随机整数花费1.6秒左右
|
|
[算法]堆排序算法 软件技术
lhwork 发表于 2006/12/11 11:01:03 |
堆排序(Heap Sort)是另外一个比较快的排序算法,时间复杂度和快速排序算法属于同一级别,只不过系数要大些。
在我的机器上用堆排序100万个随机整数花费3.3秒,而快速排序(QuickSort)需要1.6秒。
package cn.tenyears.demo;
/**
*&nb |
|
[Prototype(Ajax)]prototype对于标签定位的一些BUG 软件技术
lhwork 发表于 2006/12/11 9:25:58 |
问题起因: 在原来产品中实现的 ajax
tree上面添加拖拽效果,为了方便,使用了prototype来简化开发。代码中使用了Poistion.absolutize来改变拖动标签时改变它
的坐标为绝对坐标显示,拖动结束后再使用Poistion.relativize变回相对坐标。
解决过程: 其实一开始测试时都挺
好的,但后来在tree上面使用时就发生问题了,在拖动过程,标签跟着鼠标的移动而改变,没有问题,但在鼠标释放后,标签并没有放置在鼠标释放的位置,而
是向左和向上偏移了,而这偏移的距离刚好就是tree显示位置的left和top。在对拖动结束后的位置计算的代码,拖动过程坐标计算的代码debug了
一天没有收获后,突然想到把样式中的滚动条设置(overflow-x : "auto", overflow-y:
"scroll",)删掉试下,没想到就可以了。
经过反复验证,终于证实是滚动条惹的祸,接着就跟踪了prototype中的相关代码,在实现Position.absolutize方法时是 |
|
|