线程 lock 问题 请教高手

wb821147966 2008-04-23 12:24:35
请高手帮忙为这个程序写一下注释 让菜鸟我更容易理解
//: concurrency/AttemptLocking.java
// Locks in the concurrent library allow you
// to give up on trying to acquire a lock.
import java.util.concurrent.*;
import java.util.concurrent.locks.*;

public class AttemptLocking {
private ReentrantLock lock = new ReentrantLock();
public void untimed() {
boolean captured = lock.tryLock();
try {
System.out.println("tryLock(): " + captured);
} finally {
if(captured)
lock.unlock();
}
}
public void timed() {
boolean captured = false;
try {
captured = lock.tryLock(2, TimeUnit.SECONDS);
} catch(InterruptedException e) {
throw new RuntimeException(e);
}
try {
System.out.println("tryLock(2, TimeUnit.SECONDS): " +
captured);
} finally {
if(captured)
lock.unlock();
}
}
public static void main(String[] args) {
final AttemptLocking al = new AttemptLocking();
al.untimed(); // True -- lock is available
al.timed(); // True -- lock is available
// Now create a separate task to grab the lock:
new Thread() {
{ setDaemon(true); }
public void run() {
al.lock.lock();
System.out.println("acquired");
}
}.start();
Thread.yield(); // Give the 2nd task a chance
al.untimed(); // False -- lock grabbed by task
al.timed(); // False -- lock grabbed by task
}
} /* Output:
tryLock(): true
tryLock(2, TimeUnit.SECONDS): true
acquired
tryLock(): false
tryLock(2, TimeUnit.SECONDS): false
*///:~



请高手帮忙为这个程序写一下注释 让菜鸟我更容易理解 特别是这一句: al.lock.lock();
万分感谢
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmsuccess 2008-04-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 java2000_net 的回复:]
http://www.java2000.net/viewthread.jsp?tid=3756
[/Quote]
学习下
wb821147966 2008-04-23
  • 打赏
  • 举报
回复
是不是 timed untimed 和 Thread
同时去抢“lock”对象这把锁
老紫竹 2008-04-23
  • 打赏
  • 举报
回复
1 单独获得锁都没有问题
2 如果有另一个线程在争夺锁时就得看谁先拿到了
3 al.lock.lock(); 这个是简单的使用啊,是 al对象的 lock 属性,调用了它的lock()方法,拿到了锁

4 此程序根据线程启动的速度和系统调度不同,每次运行结果很可能不同。 那个tryLock():由于先调用,且为立即拿到锁,成功的几率稍大一些

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧