view user/matac42/note/2021/07/12/christie.md @ 76:f20d2e9092de

backup 2021-07-13
author autobackup
date Tue, 13 Jul 2021 00:10:03 +0900
parents
children
line wrap: on
line source

# waitlist

![waitlist.svg](/attachment/60ebcd5e0a7b37004aefec1d)

- waitlistはDGMが所持している
- waitlistはDGMの数だけ存在する

### setup

- どのような変数を持ったDGがあるかを読み取りwaitlistのqueueに入れる
- Take or Peekが読み取られる
- 「CGはDGの変数すべて揃わないと実行されない」という特性を実現するためにあらかじめ変数を読み取っておく
- どういったCGがあるかはこの時点ではまだわからない
- Commandとしてwaitlistにaddしていく感じ

WaitList.java
```java
public synchronized void add(Command cm) {
        if(waitList.containsKey(cm.key)){
            waitList.get(cm.key).add(cm);
        } else {
            LinkedBlockingQueue<Command> queue = new LinkedBlockingQueue<>();
            queue.add(cm);
            waitList.put(cm.key, queue);
        }
    }
```
- waitListに"hello"と"world"がaddされている

![スクリーンショット 2021-07-12 14.57.57.jpg](/attachment/60ebd9ee0a7b37004aefec29)

(src/test/java/christie/example/HelloWorld)

### put

- DGを入れる
    - 変数の値をセットする
- putして変数の値が揃ったCGはrunCommand()でTake or Peekが実行される