Head First Java 第2版
頭とからだで覚えるJavaの基本
(オライリージャパン)
Kathy Sierra (著) Bert Bates (著) 島田 秋雄(監修)
神戸 博之 (監修) 高坂 一城 (監修) 夏目 大 (翻訳)
開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Java (プログラミング言語)
- javac (コンパイラ)
- java (application launcher)
Head First Java 第2版 ―頭とからだで覚えるJavaの基本(Kathy Sierra (著)、Bert Bates (著)、島田 秋雄 (監修)、神戸 博之 (監修)、高坂 一城 (監修)、夏目 大 (翻訳)、オライリージャパン)の15章(ネットワークとスレッド)、エクササイズ(プログラミグマグネット(p.524))を解いてみる。
エクササイズ(プログラミグマグネット(p.524))
コード(BBEdit, Emacs)
TestThreads.java
public class TestThreads {
public static void main(String [] args) {
ThreadOne t1 = new ThreadOne();
ThreadTwo t2 = new ThreadTwo();
Thread one = new Thread(t1);
Thread two = new Thread(t2);
one.start();
two.start();
}
}
class Accum {
private static Accum a = new Accum();
private int counter = 0;
private Accum() {}
public static Accum getAccum() {
return a;
}
public int getCount() {
return counter;
}
public void updateCounter(int add) {
counter += add;
}
}
class ThreadOne implements Runnable {
Accum a = Accum.getAccum();
public void run() {
for (int x = 0; x < 98; ++x) {
a.updateCounter(1000);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {}
}
System.out.println("one " + a.getCount());
}
}
class ThreadTwo implements Runnable {
Accum a = Accum.getAccum();
public void run() {
for (int x = 0; x < 99; ++x) {
a.updateCounter(1);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {}
}
System.out.println("two " + a.getCount());
}
}
入出力結果(Terminal)
$ javac TestThreads.java && java TestThreads one 98098 two 98098 $ java TestThreads one 98097 two 98097 $ java TestThreads one 98099 two 98099 $ java TestThreads one 98099 two 98099 $ java TestThreads one 96099 two 96099 $
まだ、Threadとsleep, for loop, System.out.printlnのタイミングがよく理解できてないかも。
0 コメント:
コメントを投稿