代码如下:- 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 会不会不兼容.....
请问如何设计这个问题???
|