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()