目次へ

解答例 - 実習課題2 - 3.スレッドの排他制御

(実習課題2)

 実習課題1のAccountクラスを修正し、最終的な残高が正しく20000円になるようにしなさい。

解答例

/**
 * AccountThreadExample.java
 * TECHSCORE Java マルチスレッドプログラミング3章 実習課題2 
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.thread.chapter3.exercise2;

public class AcccountThreadExample implements Runnable {
    private Account account = null;

    public static void main(String[] args) {
        //aさん
        AcccountThreadExample a = new AcccountThreadExample();
        //bさん
        AcccountThreadExample b = new AcccountThreadExample();

        //口座
        Account account = new Account();

        a.setAccount(account);
        b.setAccount(account);

        Thread threadA = new Thread(a);
        Thread threadB = new Thread(b);

        //aさんが口座に入金する
        threadA.start();
        //bさんが口座に入金する
        threadB.start();
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep((long) (Math.random() * 1000)); //1秒以下のランダムな時間
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //1000円預金する
            this.getAccount().deposit(1000);
            //残高を表示する
            this.getAccount().showBalance();
        }
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

}
/**
 * Account.java
 * TECHSCORE Java マルチスレッドプログラミング3章 実習課題2 
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.thread.chapter3.exercise2;

public class Account {
    private int balance = 0;

    //synchronizedメソッドに変更
    synchronized public void deposit(int money) {
        int total = balance + money;
        try {
            Thread.sleep((long) (Math.random() * 1000));
        } catch (InterruptedException e) {
        }
        balance = total;
    }
    public void showBalance() {
        System.out.println("現在の残高は " + balance + " 円です。");
    }
}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp