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

쓰레드(Thread)내에서 멤버변수 추가/할당

0 추천

Thread에 관하여 잘 모르기에 질문 드립니다.

 

우선, Main class에는 멤버변수 ArrayList<AClass> mAClass; 가 있습니다.

 

onCreate() 함수 내에 SharePreferences를 통하여 HashSet<String>형태의 과거 사용값을 가져온 후

 

 while ( hashSetIterator.hasNext() ) {

     final String fBVariable = hashSetIterator.next().toString();
     new Thread(new Runnable() {

         public void run() {

             mAClass.add( CMethod(fBVariable ) );

         }

     }).start();
 }

와 같은 방식으로 thread를 생성하여 작업하려 합니다.

 

CMethod() 의 처리 과정은 fBVariable에 따라서 처리속도가 달라지는데, 이러한 경우

 

HashSet<String>의 결과 순서물과 mAClass의 결과 순서물이 같을지 모르겠습니다.

 

1. Thread를 통하여 해당 Class의 멤버변수에 값을 할당하는 방식은 위와 같이 하는 것이 맞습니까?

 혹시, 위 방법이 틀리다면 다른 방법을 알려주시면 감사하겠습니다.

 

2. 결과물의 방식이 같습니까? 실제 처리속도가 다르다면 mAClass에 할당되는 순서도 다를 것 같아서, 한 변수에 동시 접근 하지 못하도록 막는 방법을 찾아보았지만, syncronized를 사용하는 것 같은데 정확히 맞는 것인지 모르겠습니다. mAClass에 add하는 구간을 syncronized로 감싸서 수행하는 것이 맞습니까?

 

읽어주셔서 감사합니다.

nkSong (1,000 포인트) 님이 2017년 8월 28일 질문

1개의 답변

0 추천
 
채택된 답변

뭐 루프문을 통해서 쓰레드를 별도로 돌리고 있으니 결과값은 랜덤이겠지요...

아마 많은 개발자가 같은 고민을 했을거고 이미 해답은 나와있지요.

요즘 뜨고있는 RXJAVA란 넘입니다.

 Observable.from(fBVariableArray)

      .map(new Func1<String, AClass>() {
            @Override
            public AClass call(String s) {
                return    CMethod(s)

            }
        })

       .subscribeOn(Schedulers.io())

       .observeOn(AndroidSchedulers.mainThread())

       .subscribe(new Action1<AClass>() {
            @Override
            public void call(AClass a) {
                 mAClass.add(a);
            }
        });

 

참고:https://academy.realm.io/kr/posts/rxandroid/



 

 

익명사용자 님이 2017년 8월 28일 답변
nkSong님이 2017년 8월 29일 채택됨
RXJAVA라는 것에 대해서 처음들어봤습니다 ㅎㅎ..

일다 개발에 참고하여 알아보도록 하겠습니다.

좋은 정보 감사드립니다~!
...