1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | package mymain; //이건 내부 클래스 아님 //Runnable : 대기 //자원공급이 안되는 상태 : 아래 코드에서 int money=0;인 상태 그래서 코드가 실행안됨 class MyRunnable2 implements Runnable { int money = 10000; @Override public void run() { // TODO 자동 생성된 메소드 스텁 String name = Thread.currentThread().getName(); while (true) { /* synchronized 안에서만 사용가능(동기화 블록 내에서만 사용해야함) notify();, wait(); [ 순서 ] 1_꺠우고나서(wait pool:잠들어있는 방) 2_대기방에 들어감(Runnable) 3_그리고 CPU가 대기방에서 실행함 */ synchronized (this) { //진입과 동시에 1천원 뺴감 //자원이 있으면 잠들어 있는 쓰레드 깨움 money -= 1000; // money = money - 1000; if(money >= 1000) //진입과 동시에 잠들어 있는 쓰레드를 깨운다. //notifyAll(); : 여러명이 들어가 있을때 한꺼번에 깨우는 메소드 notify();//깨움//wait pool에 대기방에 들어감 System.out.printf("--[%s] 먼저(잔액:%d--\n", name, money); try { //자신의 코드를 처리한 후에 스스로 잠든다(대기상태로) wait(); Thread.sleep(500); } catch (InterruptedException e) { // TODO 자동 생성된 catch 블록 e.printStackTrace(); } } } } } public class MyMain_기아 { public static void main(String[] args) { // TODO 자동 생성된 메소드 스텁 MyRunnable2 runnable = new MyRunnable2(); Thread t1 = new Thread(runnable,"▶1_형님"); Thread t2 = new Thread(runnable,"◀2_아우"); t1.start(); t2.start(); } } | cs |
'IT > 자바' 카테고리의 다른 글
Random 클래스에 대해서 (0) | 2018.05.19 |
---|---|
쓰레드 데드락 (0) | 2018.05.18 |
쓰레드 공정 (0) | 2018.05.18 |
[Java 강의37] 자바 스레드 - 3 (Runnable 인터페이스) (0) | 2018.05.17 |
상속 스레드, Runnable 인터페이스 스레드 (0) | 2018.05.17 |