「Java ScheduledExecutorService を利用してタイマーを実装」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==Java ScheduledExecutorService を利用してタイマーを実装== [Java]{{category コード片}} ===Stopwatch.java=== import java.util.ArrayList; import java.…」) |
|||
| 1行目: | 1行目: | ||
==Java ScheduledExecutorService を利用してタイマーを実装== | ==Java ScheduledExecutorService を利用してタイマーを実装== | ||
| − | [Java]{{category コード片}} | + | [[Java]]{{category コード片}} |
===Stopwatch.java=== | ===Stopwatch.java=== | ||
import java.util.ArrayList; | import java.util.ArrayList; | ||
| 39行目: | 39行目: | ||
// 15秒カウントしたら止める | // 15秒カウントしたら止める | ||
| − | if (chronometer.getPastSeconds() | + | if (chronometer.getPastSeconds() >= 15) { |
chronometer.stop(); | chronometer.stop(); | ||
} | } | ||
| 51行目: | 51行目: | ||
private ScheduledExecutorService scheduler; | private ScheduledExecutorService scheduler; | ||
private long basetime; | private long basetime; | ||
| − | private List | + | private List<TickListener> listner; |
| − | private ScheduledFuture | + | private ScheduledFuture<?> tickHandle; |
public Chronometer() { | public Chronometer() { | ||
| − | listner = new ArrayList | + | listner = new ArrayList<TickListener>(); |
scheduler = Executors.newScheduledThreadPool(1); | scheduler = Executors.newScheduledThreadPool(1); | ||
} | } | ||
2020年2月15日 (土) 08:03時点における版
Java ScheduledExecutorService を利用してタイマーを実装
Stopwatch.java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* タイマーを実装
*/
public class Stopwatch {
public static void main(String[] args) {
Stopwatch me = new Stopwatch();
me.test();
}
/**
* Chronometer をテストする
*/
public void test() {
Watcher watcher = new Watcher();
Chronometer chronometer = new Chronometer();
chronometer.setOnTickListener(watcher);
chronometer.setBaseTime(System.currentTimeMillis());
chronometer.start();
}
/**
* Chronometer のイベントを拾うためのテストクラス
*
*/
public static class Watcher implements TickListener {
public void onTick(Chronometer chronometer) {
System.out.println("seconds:" + chronometer.getPastSeconds());
// 15秒カウントしたら止める
if (chronometer.getPastSeconds() >= 15) {
chronometer.stop();
}
}
}
/**
* タイマー
*/
public static class Chronometer {
private ScheduledExecutorService scheduler;
private long basetime;
private List<TickListener> listner;
private ScheduledFuture<?> tickHandle;
public Chronometer() {
listner = new ArrayList<TickListener>();
scheduler = Executors.newScheduledThreadPool(1);
}
/**
* 基準時間をセット
* @param time
*/
public void setBaseTime(long time) {
this.basetime = time;
}
/**
* 経過秒数を取得
* @return
*/
public long getPastSeconds() {
return (System.currentTimeMillis() - this.basetime) / 1000;
}
/**
* リスナー登録
* @param lsnr
*/
public void setOnTickListener(TickListener lsnr) {
listner.add(lsnr);
}
/**
* 開始
*/
public void start() {
final Runnable ticker = new Runnable() {
public void run() {
for (TickListener tl : listner) {
tl.onTick(Chronometer.this);
}
}
};
// 1秒ごとにイベントを発生
tickHandle = scheduler.scheduleAtFixedRate(ticker, 0, 1, TimeUnit.SECONDS);
}
/**
* 終了
*/
public void stop() {
scheduler.schedule(new Runnable() {
public void run() {
tickHandle.cancel(true);
}}, 0, TimeUnit.SECONDS);
}
}
/**
* タイマーイベントリスナー
*/
public interface TickListener {
void onTick(Chronometer chronometer);
}
}
© 2006 矢木浩人