0904_Java : Thread Synchronization 동기화

0904_Java : Thread Synchronization 동기화

package threadEx2; public class Ex001_Synchronized { public static void main(String[] args) { MyBank1 b = new MyBank1(); Thread t1 = new Thread(b); Thread t2 = new Thread(b); t1.start(); t2.start(); } } // 동기화 하지 않은 경우 class MyBank1 implements Runnable { private int money = 10000; @Override public void run() { int need = 6000; int n = 0; String msg = null; try { if(getMoney()>=need) { Thread.sleep(200); n = drawMoney(need); msg = "인출 성공"; } else { n = 0; msg = "인증 실패"; } System.out.println(msg + ", 인출금액:"+n+", 잔고:"+getMoney()); } catch (Exception e) { e.printStackTrace(); } } public int getMoney() { return money; } private int drawMoney(int m) { money -= m; return m; } }

package threadEx2; public class Ex003_Synchronized { public static void main(String[] args) { ShareData1 share = new ShareData1(); UpThread1 t1 = new UpThread1(share, "up"); DownThread1 t2 = new DownThread1(share, "down"); t1.start(); t2.start(); } } // 동기화 하지 않은 경우 class ShareData1 { private int num = 100; public void up(String title) { System.out.print(title+":"+num); num++; System.out.println(", 증가->"+num); } public void down(String title) { System.out.print(title+":"+num); num--; System.out.println(", 감소->"+num); } } class UpThread1 extends Thread { private ShareData1 share; private String title; public UpThread1(ShareData1 share, String title) { this.share = share; this.title = title; } public void run() { for(int i=0; i<5; i++) { try { sleep(500); share.up(title); } catch (Exception e) { } } } } class DownThread1 extends Thread { private ShareData1 share; private String title; public DownThread1(ShareData1 share, String title) { this.share = share; this.title = title; } public void run() { for(int i=0; i<5; i++) { try { sleep(500); share.down(title); } catch (Exception e) { } } } }

from http://development-writing.tistory.com/264 by ccl(S) rewrite - 2021-09-07 07:27:38