2014年4月6日日曜日

開発環境

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 コメント:

コメントを投稿