【独習C】本を読んで質問【独習C】

このエントリーをはてなブックマークに追加
109デフォルトの名無しさん

class Resource {
 int id;

 public Resource(int id) {
  this.id = id;
 }

 public String toString() {
  return "" + id;
 }
}

class ResourceCoordinator {
 Stack resources = new Stack();

 public ResourceCoordinator() {
  for(int i = 0; i < 4; i++) {
   resources.push(new Resource(i));
  }
 }
110デフォルトの名無しさん:2006/03/01(水) 13:50:33 BE:416535757-

 public synchronized Resource getResource() {

  while(true) {

   // リソースが使用可能かチェックする
   if (!resources.empty()) {
    Resource r = (Resource)resources.pop();
    System.out.println("Get resource " + r);
    return r;
   }
  
   // 使用可能なリソースを待機する
   try {
    wait();
   }
   catch(InterruptedException ie) {
    ie.printStackTrace();
   }
  }
 }

111デフォルトの名無しさん:2006/03/01(水) 13:51:12 BE:142812634-
 public synchronized void releaseResource(Resource r) {
  // リソースをスタックにプッシュする
  System.out.println("Release resource " + r);
  resources.push(r);

  // 待機中のスレッドすべてに通知を送る
  notifyAll();
 }
}

class ResourcesTasks {
 public static void main(String args[]) {
  // リソースの調整役を作成する
  ResourceCoordinator rc = new ResourceCoordinator();

  // 作業を作成する
  for(int i = 0; i < 10; i++) {
   new Task(rc, i).start();
  }
 }
}


上記がソースファイルです。