마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Thread 실행관련 문제입니다 ^^ 도와주세용

0 추천
int abc[] = {1,2,3,4,5};

boolean bol[] = {true,false,true,false,true};

 

Thread timeCount = new Thread() {
                @Override
                public void run() {

                for (int a : abc) {

                     thread.sleep(1000,1);

                    Log.d("",""+bol[a]);

               }

thread.start();

 

간략하게 코드 보면 이런식인데요 예를들어 버튼 이벤트시에 쓰레드가 작동한다고하면 1초간격으로 로그에 T,F,T,F,T 이렇게 찍히잖아요  이말은 a가 1,2,3,4,5 순서대로 진행하잖아요 그런데 버튼을 빠르게 세번 누르면

1,1,1,2,2,2,3,3,3,4,4,4,5,5,5 이렇게되더라구요 ㅠㅠ 저기저 int a를 전역변수로도 안되고 방법이 없을가요?

저는 1,2 가 되는 순간에 눌렀을때 이벤트 받고 3, 4, 5 하고 끝내고 싶거든요 ㅠㅠ
윤슈슈슈 (3,030 포인트) 님이 2016년 2월 24일 질문
스탑워치랑 원리가 비슷한꺼 같내요  'ㅅ ';;

1개의 답변

0 추천
 
채택된 답변
생각해 보시면

버튼을 누를때 마다 새로운 쓰레드가 생성 됩니다.

1초 내 버튼을 3번 누르셨다면 3개의 쓰레드가 동시에 실행 되고 있는 거죠

그래서 111, 222,333 이렇게 찍히고 있는 겁니다.. 텀을 좀 두고 누르시면 1,2,1,3 이런식으로도 나타날 수 있습니다.

버튼 이벤트를 한번만 처리하고 싶으시다면 쓰레드를 전역 변수로 선언 하신 다음에 쓰레드가 살아 있는지 isAlive 함수를 사용하여 체크후 사용하셔야 할것 같습니다.

순차 처리를 원하시면 synchronized를 거시던지 Semaphore를 활용 하시면 될 것 같습니다.

아니면  2까지 진행된 하나의 쓰레드만 실행 하고 싶으시면 2 가 되는 순간 쓰레드 풀내에 존재하는

다른 쓰레드를 intterupt 걸어 종료 시키셔도 됩니다.
익명사용자 님이 2016년 2월 24일 답변
윤슈슈슈님이 2016년 2월 26일 채택됨
...