멀티스레딩은 너무어렵다
java의 정석책에서 과제랑 비슷한 문제가 있어서 긁어왔는데
밑에 소스는 원본은 아니야 내가 좀수정해써
보면 알겠지만
n에서 난수가 빠지는 형식이고
최종적으로 0이되면 끝나는데
(예를 들면 1000 500 200 0 (종료) )
이런식으로 나오는데
이걸 더하는 방식으론 안되나?
예를들면 ( 100 400 200 300 (종료. 1000일때까지)
class dotori {
public static void main(String args[]) {
Runnable r = new dotori3();
Thread d1 = new Thread(r);
Thread d2 = new Thread(r);
Thread d3 = new Thread(r);
Thread d4 = new Thread(r);
Thread d5 = new Thread(r);
Thread d6 = new Thread(r);
Thread d7 = new Thread(r);
Thread d8 = new Thread(r);
Thread d9 = new Thread(r);
Thread d10 = new Thread(r);
d1.start();
d2.start();
d3.start();
d4.start();
d5.start();
d6.start();
d7.start();
d8.start();
d9.start();
d10.start();
}
}
class Account {
int n = 1000000;
public synchronized void minus(int minus){
if(n >= minus) {
try { Thread.sleep(100);} catch(Exception e) {}
n -= minus;
}
}
}
class dotori3 implements Runnable {
Account k= new Account();
public void run() {
while(k.n > 0) {
int dotori2 = (int)(Math.random() * 100000);
k.minus(dotori2);
String name = Thread.currentThread().getName();
System.out.println(name + "의 총 도토리 수는 :"+k.n);
}
}
}
이거는 동기화 잘 해놔서 별 상관없음
아니.. ㅇㅇ형....... 잘되는 소스인데 출력방식만 바꾸고싶어서 그런거야
Account.run하고 dotori3.run만 바꾸면 되겠네
형 ㅠㅠ나 병신인거알잖아......좀만더 자비좀 ㅠㅠ
http://ideone.com/3lfIBJ
돌아가게 고쳐보셈