Next: 17.3 スレッドの例 3
Up: 17 デーモンスレッド
Previous: 17.1 スレッドの例 1
預金の残高を2つのスレッドで加算してゆく例.
/*
* ap/basic/Ban.java
*/
package basic;
class Bank {
private long balance0 = 0;
private long balance1 = 0;
private long balance2 = 0;
public void inc0() {
balance0++; // balance0 = balance0 + 1;
}
public synchronized void synInc1() {
balance1++;
}
public void inc2() {
balance2++;
}
public static void main (String[] args) {
Bank bank = new Bank();
Thread add1 = new Thread(new Add(bank));
Thread add2 = new Thread(new Add(bank));
add1.start();
add2.start();
try {
add1.join();
add2.join();
} catch (InterruptedException e) {}
System.out.println("balance0 = " + bank.balance0);
System.out.println("balance1 = " + bank.balance1);
System.out.println("balance2 = " + bank.balance2);
}
}
/*
* ap/basic/Add.java
*/
package basic;
class Add implements Runnable {
private Bank bank;
private final long loop = 50000000L;
Add(Bank bank) {
this.bank = bank;
}
public void run() {
for (long i = 0; i < loop; i++) {
bank.inc0();
}
for (long i = 0; i < loop; i++) {
bank.synInc1();
}
for (long i = 0; i < loop; i++) {
synchronized (bank) {
bank.inc2();
}
}
}
}
% javac basic/Bank.java
% java basic.Bank
balance0 = 91717419
balance1 = 100000000
balance2 = 100000000
generated through LaTeX2HTML. M.Inaba 平成18年5月7日