package javabook.ch07; class ATM2 { // ATMÀÇ °èÁ Á¤º¸¸¦ °ü¸®Çϴ Ŭ·¡½º ¼±¾ð private int total; public ATM2(int total) { this.total = total; } void deposit(int amount, String name) { total += amount; System.out.println(name + " : ÀÔ±Ý ±Ý¾× : " + amount); } void withdraw(int amount, String name) { // Ãâ±ÝÀ» ó¸®ÇÏ´Â ¸Þ¼Òµå if((total - amount) > 0) { // Ãâ±ÝÀÇ °¡´É À¯¹«¸¦ È®ÀÎ total -= amount; System.out.println(name + " : Ãâ±Ý ±Ý¾× : " + amount); } else { System.out.println(name + "´ÔÀÇ Àܾ×ÀÌ ºÎÁ·ÇØ Ãâ±ÝÇÒ ¼ö ¾ø½À´Ï´Ù."); } } public void getTotal() { System.out.println("ÇöÀç °èÁ Àܾ×Àº :" + total) ; } } class ATM_USER2 extends Thread { // ATM »ç¿ëÀÚ°¡ Ŭ·¡½º ¼±¾ð boolean flag = false; // ÀÔ±Ý/ÀÎÃâ ATM2 obj; public ATM_USER2(ATM2 obj, String name) { super(name); this.obj = obj; } public void run() { for(int i = 0; i < 5; i++) { try { sleep(500); } catch(InterruptedException e) { } synchronized(obj) { // ATM Ŭ·¡½º¿¡ µ¿±âÈ­¸¦ À¯ÁöÇØÁÜ. Áß°ýÈ£ ³»¿¡¼­´Â ÀÔ±Ý Áß Ãâ±ÝÀ» ¼öÇàÇÒ ¼ö ¾øµµ·Ï ÇÔ if(flag) { obj.deposit((int)(Math.random()* 10000), getName()); obj.getTotal(); } else { obj.withdraw((int)(Math.random()* 10000), getName()); obj.getTotal(); } } flag = !flag ; } } } public class ThreadExam7 { public static void main(String[] args) { ATM2 obj = new ATM2(10000); // °øÀ¯ ±Ý¾× ¼³Á¤(°èÁ¿¡ 10000¿øÀÌ ÀÖÀ½) ATM_USER2 user1 = new ATM_USER2(obj, "¼­º¸¿ø"); // °èÁ ¼¼ °³¸¦ ó¸®Çϴ Ŭ·¡½º »ý¼º ATM_USER2 user2 = new ATM_USER2(obj, "ÃÖÀç±Ô"); ATM_USER2 user3 = new ATM_USER2(obj, "³ë°æ¾Æ"); user1.start(); user2.start(); user3.start(); } }