スレッドを理解するのに役立つ小さなサンプル プログラムを作成しました。以下のように、2 つのクラス ファイルがあります。
DoBench.java:
package benchmark;
public class DoBench {
public static void main(String[] args) {
Benchmark bmark = new Benchmark();
Thread Timer = new Thread(bmark,"worktimer"); // name doesn't work?
Timer.start();
doALotOfWork();
// Timer.finish(); // didn't work? why??
bmark.finish();
}
private static void doALotOfWork() {
for (int i=0;i<10;i++) {
System.out.println(i);
}
}
}
Benchmark.java:
package benchmark;
public class Benchmark implements Runnable {
long start = 0;
String timerName = Thread.currentThread().getName();
public void finish() {
long diff = (System.currentTimeMillis()-start);
System.err.println("\n"+timerName + " took " + diff + "ms");
}
@Override
public void run() {
start = System.currentTimeMillis();
System.err.println("\nStarted timer " + timerName);
}
}
出力は次のとおりです。
Started timer main
0
1
2
3
4
5
6
7
8
9
main took 0ms
質問が 2 つあります。
- スレッドにアクセスできる名前を付けるにはどうすればよいですか (worktimer)?
- Benchmark() ではなく Thread の finish() メソッドにアクセスするにはどうすればよいですか?