黑马程序员技术交流社区
标题:
java的wait 吊起线程的时候 会不会释放synchronized锁呢
[打印本页]
作者:
张善颖
时间:
2013-3-18 21:54
标题:
java的wait 吊起线程的时候 会不会释放synchronized锁呢
本帖最后由 张善颖 于 2013-3-19 20:45 编辑
java的wait 吊起线程的时候 会不会释放synchronized锁呢?
我现在做的其实算是一个 资源池的程序
public class Ziyuan<R> {
private Hashtable<R, Boolean> tab = new Hashtable<R, Boolean>();
public void add(R r) {
synchronized (tab) {
tab.put(r, false);
}
}
//使用这个资源
public void use(R r) {
synchronized (tab) {
if (tab.containsKey(r)) {
tab.put(r, true);
tab.notifyAll();
}
}
}
//停止使用资源
public void release(R r) {
synchronized (tab) {
if (tab.containsKey(r)) {
tab.put(r, false);
tab.notifyAll();
}
}
}
//关闭系统 需要等待所有资源停止使用
public void close() throws InterruptedException {
synchronized (tab) {
while (true) {
boolean able = true;
for (R r : tab.keySet()) {
if (tab.get(r)) {
able = false;
break;
}
}
if (!able) {
tab.wait(10000);
} else {
System.out.println("可以关闭了!");
break;
}
}
}
}
}
复制代码
每次给名为tab的更改哈希表表数据时候 都会用synchronized锁上(布尔Boolean表示是否在使用),每次操作都会notify其他线程
close的时候 要判断是否所有tab的资源R都为false, 如果有一个资源在使用(有一个为true) 就tab.wait() 等待notify 但是我就是想知道跑 这个wait和notify 和 synchronized 会不会不兼容.....
请问大家如何设计这个问题?
作者:
再见亦是泪
时间:
2013-3-18 23:21
你只要记住wait是会放线程锁的,sleep是不会放线程锁的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2