[J2SE 5.0专题][4.2]并发工具包

Doug Lea是Java并发编程的大拿,我想不少人都应该听说过那一本Concurrent Programming in Javatm
Design principles and patterns,几乎是学习Java并发编程必看的一本书。这回Doug Lea牵头的JSR-166在J2SE 5.0中引入的新的并发工具包绝对值得关注。

新引入的java.util.concurrent包,以及背后的实现和API使用完全可以写出一本书甚至几本书来,我想在这里我就避重就轻,挑两个简单的了解一下吧,有兴趣的朋友可以另外参考一些书籍和网上资料。

我打算拿来看一看的是Semaphore类Executor接口

Semaphore其实就像是一个通行证管理员,在一个设计好的环境,每个线程为了完成某件事情,都需要从管理员那里拿到一各通行证,然后去处理那件事,处理好以后,再把通行证还给管理员供其他线程使用。对一个比较极端的情况:只有一个通行证,这个时候同一时间之可能有一个线程去处理那件事,这就类似synchronized的实现方式了。Semaphore其实要比wait()或者synchronized要灵活得多。

来一点实际的代码片段:

private final Semaphore s = new Semaphore(1); // “只有一个通行证可用”
s.acquireUninterruptibly(); // “尝试获取一个通行证,直到取得为止”
// “拿着通行证去完成一件事...”
s.release(); // “归还这个通行证”

而Executor则是很好的抽象出一套线程执行框架,将具体的线程处理方式从我们的具体的代码中分离出来,在另一个地方实现具体的线程处理机制:如单线程,或者线程池等。Executor只声明了一个方法:

void execute(Runnable command)

同样来一段演示代码:

Executor e = new XXXExecutor(); // 假想的Executor实现类
e.execute(new Runnable() {...} );
e.execute(new Runnable() {...} );

具体这个Runnable实例最终在怎样的线程环境和以怎样的方式被执行,完全由Executor的实现类XXXExecutor决定,而非写死到这段代码中。

有关更详细的Java并发编程,参考java.util.concurrent包Doug Lea的主页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值