편집 기록

편집 기록
  • 프로필 김대동님의 편집
    날짜2018.06.21

    자바 멀티스레드 공유변수 문제가 있습니다.


    제가 자바로 컨솔게임을 만들면서 적군의 행동을 멀티스레드로 쓰고 있습니다.

    스레드를 클래스로 따로 만들어 메인에서 start()시켜줍니다.

    스레드안의 구조는 적군의 체력(static변수)이 0이하로 될 때까지 돌도록 반복문으로 돌렸고요.

    하지만 멀티스레드이다보니까 적군의 체력이 0이하로 되어도 계속 돌더라고요.

    우선 스레드 앞뒤로 출력값을 보아 제대로 적군의 체력이 0이하가 되는 지 확인을 했고, 이 점은 이상이 없었습니다.

    그리고 싱글스레드로만 돌렸을 때는 동작이 멈추는 것을 확인했습니다.

    그래서 찾아보니 스레드를 공유하여 접근한다면 run()메서드에 싱크로나이즈를 붙여주라고 해서

    붙여줬는데도 하나만 스레드가 중단되고, 하나는 계속 진행이 됩니다.

    이럴 땐 어떻게 해야할까요?

    싱크로나이즈가 답이 아닌가요?

    방법만 알려주시면 제가 혼자 해보고 싶어서 입코딩으로만 올렸습니다.

    읽어주셔서 감사합니다.

  • 프로필 알 수 없는 사용자님의 편집
    날짜2017.01.13

    자바 멀티스레드 공유변수 문제가 있습니다.


    제가 자바로 컨솔게임을 만들면서 적군의 행동을 멀티스레드로 쓰고 있습니다.

    스레드를 클래스로 따로 만들어 메인에서 start()시켜줍니다.

    스레드안의 구조는 적군의 체력(static변수)이 0이하로 될 때까지 돌도록 반복문으로 돌렸고요.

    하지만 멀티스레드이다보니까 적군의 체력이 0이하로 되어도 계속 돌더라고요.

    우선 스레드 앞뒤로 출력값을 보아 제대로 적군의 체력이 0이하가 되는 지 확인을 했고, 이 점은 이상이 없었습니다.

    그리고 싱글스레드로만 돌렸을 때는 동작이 멈추는 것을 확인했습니다.

    그래서 찾아보니 스레드를 공유하여 접근한다면 run()메서드에 싱크로나이즈를 붙여주라고 해서

    붙여줬는데도 하나만 스레드가 중단되고, 하나는 계속 진행이 됩니다.

    이럴 땐 어떻게 해야할까요?

    싱크로나이즈가 답이 아닌가요?

    방법만 알려주시면 제가 혼자 해보고 싶어서 입코딩으로만 올렸습니다.

    읽어주셔서 감사합니다.