本帖最后由 张善颖 于 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 会不会不兼容.....
请问大家如何设计这个问题? |