以下のプログラムでわからないことがあります。
new BadBankTest(bank).start(); はnewから始まっており、2つ使ってますが、そのインスタンス生成の仕組みはどうなってるのでしょうか?
省略しない場合は、BadBankTest bt1 = new BadBankTest(bank); のように作ったインスタンスをbt1に代入になると思いますが、
newから始まった場合に左に代入しないことでの、インスタンス生成のその仕組みがわからなくて困ってます。
class BadBank {
//省略
}
public class BadBankTest extends Thread {
BadBank bank;
public BadBankTest(BadBank bank) {
this.bank = bank;
}
public void run() {
while(true) {
bank.addMoney(100);
bank.addMoney(-100);
}
}
public static void main(String[] args) {
BadBank bank = new BadBank();
new BadBankTest(bank).start();
new BadBankTest(bank).start();
/* 上と同じ動作
BadBank bank = new BadBank();
BadBankTest bt1 = new BadBankTest(bank);
bt1.start();
BadBankTest bt2 = new BadBankTest(bank);
bt2.start();
*/
}
}
お礼
なるほど、変数に代入しないことで、インスタンスが使い捨てなんですか。 たしかにbr1の方式を使うとインスタンスが生成されっぱなしで、ガーベッジコレクションが起きないですね。 ありがとうございました。