public class hiSyncGate extends Object
扉モデルで同期処理を行います。
待ち側(複数)はwaitOpen()で扉が開くのを待ちます。
動機側はopen()で扉を開けます。
扉が開くと、待ち状態だったスレッドは全て動き出します。
複数スレッドで待っている場合、一斉に待ちが解かれますが、
順番は不定です。
開いた扉はだれかがclose()で閉じるまで開いたままです。
| コンストラクタと説明 |
|---|
hiSyncGate()
閉じた状態の扉を設置する
|
hiSyncGate(boolean opened_)
初期状態を指定して扉を設置する.
|
| 修飾子とタイプ | メソッドと説明 |
|---|---|
void |
cancelRepeatOpen()
repatOpenをキャンセルする.
|
void |
close()
扉を閉じる
|
boolean |
isOpened()
扉が開いているか.
|
void |
open()
扉を開ける
|
void |
repeatOpen(long delay_,
long period_)
指定ミリ秒後に開き以降指定ミリ秒後に繰り返し開く.
|
boolean |
tryOpen()
扉が開いているか.
|
boolean |
tryOpenAndClose()
開いてしていたら扉を閉じ、他の侵入を禁止する.
|
void |
waitOpen()
扉が開くのを待つ.
|
void |
waitOpen(long timeout_)
扉が開くのを待つ.
|
void |
waitOpenAndClose()
開くまで待ち直ちに、他の侵入を禁止する.
|
public hiSyncGate()
public hiSyncGate(boolean opened_)
opened_ - true:開いた状態、false:閉じた状態public void waitOpen()
複数個所でwaitOpen()で待っている場合、openされると全箇所起床します。
public void waitOpen(long timeout_)
timeout_ - タイムアウト・ミリ秒public void open()
public void close()
public boolean isOpened()
public boolean tryOpen()
isOpened()と同じです。public boolean tryOpenAndClose()
public void waitOpenAndClose()
複数個所でwaitOpenAndClose()で待っている場合、openされるとただ一か所のみ起床します。
起床する箇所に優先順位はありません。
public void repeatOpen(long delay_,
long period_)
wake-upタイミングが時刻的に定まったsleepのように使えます。
hiSyncGate _gate=new hiSyncGate();
_gate.repatOpen(0,1000); // 1秒(1000ミリ秒)毎に開く
for(int _n=0;_n<1000;++_n){
doSomething(_n);
_gate.waitOpenAndClose(); // doSomething()の所要時間に関わらず
// 一定の間隔でwake-upする
// doSomething()が1秒以上かかった場合
// は既に開いている
}
_gate.cancelRepeatOpen();
delay_ - 最初に開くまでのミリ秒period_ - 繰り返し間隔public void cancelRepeatOpen()