그래서 코드에 주석을 달아가려고하는데.. 주석좀 달아주세요.. 모르는게 투성이네요.. 학교를 제대로 출석을못해서..
슬립은뭐고 여튼.. 좀 도아주실분 있으시면 정말 감사하겠습니다.. 이코드를 설명하면 되는건데..ㅠ
앞에나와서 몇번라인 때문에 몇번라인으로가서 뭐가실행됩니다 어쩌고 이렇게하는거ㅏ는데... 좀 돠주세요 제발 ㅠ
package javabook.ch07;
class Slot extends Thread {
int m_nNumber;
boolean m_bFlg;
Slot(String strName) {
super(strName);
m_bFlg = true;
}
public void run() {
try {
while(m_bFlg) {
m_nNumber = (int)(Math.random() * 10);
Thread.sleep((int)(Math.random() * 100));
}
}
catch(InterruptedException e) {
System.out.println(e.getMessage());
}
}
public void setFinish() {
m_bFlg = false;
}
public int getNumber() {
return m_nNumber;
}
}
public class SlotMachine {
public static void main(String[] args) {
Slot s1 = new Slot("s1");
Slot s2 = new Slot("s2");
Slot s3 = new Slot("s3");
boolean bFlg = true;
int n1, n2, n3;
s1.start();
s2.start();
s3.start();
while(bFlg) {
n1 = s1.getNumber();
n2 = s2.getNumber();
n3 = s3.getNumber();
System.out.println(n1 + " " + n2 + " " + n3);
if(n1 != 0) {
if(n1 == n2 && n2 == n3) {
System.out.println("당첨...");
bFlg = false;
}
}
}
}
}
메일로보내드렸습니다고갱님
나 8천원.... 손해보고 하는거임.
디씨메일로요??.. 님들제발 부탁드림 ㅠㅠ
sh님 어디메일이요??
아놔콘다 // 좀한번만 도와주세요 엉엉.. 저코드를 가꼬나와서 해석할수잇게.. main부터 해석시작하는건 알겟는데..
스레드 모른다고 생각하고 간략하게 설명한다... s1, s2, s3은 스레드클래스 상속받은 클래스Slot의 객체들.. 메인에서 start() 하면 각 객체들의 run()이 실행되는데 이건 순차적으로, 즉 s1의 run()실행후 s2의 run() 실행후 s3의 run()이 실행되는게아니라 메인에서 start()해주는 라인 이후의 코드와, s1의 run()의 코드, s2의 run()코드, s3의 run()코드 각각 독립적으로 돌아간다.. 각각의 슬롯은 번호를 랜덤함수로 생성해서 m_nNumber에 대입하고 지정된 임의의 시간범위 안에서 랜덤하게 쉰다(sleep()함수 안에 들어가는 수는 밀리 세컨드) 메인에 있는 while에서 계속적으로 이 세개의 슬롯머신에서 변화하는 값을 꺼내오다가 셋다 같으면
while문 빠져나온다..
공부좀해라 그리고 시방탱아 형이 원래 뭐해달라고하면 썅욕하고 꺼지라그러는데 비와서 한번 봐줌
행님 감사합니다!
이거 동기화 잘 되나
저기에서 동기화 문제는 생각안해도 될듯.. 셋이 같은숫자가 나왔는데 메인스레드에서 가져올 찰나에 바뀔수는 있겠지 하지만 언젠간 맞아 떨어짐
저기서는 동기화가 안되더라도 성공할 수가 있거든. 엄밀하게 짜려면 m_nNumber 을 volatile로 선언해야 하는데, 메인메모리에 반영되지 않더라도 값만 같으면 그냥 성공하는거임... (갱신된 값이 제때 반영이 안돼서 성공할 수도 있음..)
그렇구나... 데드락이 아니니까 상관없군