컴퓨터/이론: 개발
[2017.11.15] 29. Thread-safe List (CopyOnWriteArrayList) 실습2
heepie
2017. 11. 15. 21:36
도입
이번 포스팅에서는 지난 포스팅에이어 Thread 병렬처리와 Thread-safe List를 실습할 예정이다.
궁금증
조건은 1개의 Thread는
1) List에 10개의 데이터를 입력하고
2) 5초 뒤 List의 size()를 출력한다.
이때, 5초가 되기 전 여러개의 Thread가 List에 데이터를 입력한다면 첫번째 실행된 Thread가 size()를 출력할 때 데이터의 입력 결과를 모두 반영할까?

실습
Thread 1을 생성한다.
Thread 1의 역할 |
1. List에 10개의 데이터를 입력 2. 5초 뒤 List의 size()를 출력 |
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class TestActivity extends AppCompatActivity { private CopyOnWriteArrayList<String> threadSafeList; private static int countOfThread=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); threadSafeList = new CopyOnWriteArrayList<>(); } // Thread 1 public void onAddAndRemove(View view) { new Thread() { public void run() { int count = countOfThread++; // 임의값 10개 입력 for (int i = 0; i < 10; i = i + 1) { threadSafeList.add(i + ""); Log.i("heepie", "["+count+"]Thread3 Add size: " + threadSafeList.size()); } // 5초 Sleep 후 현재 개수 반환 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } Log.i("heepie", "["+count+"]Thread3 Remove Target size: " + threadSafeList.size()); } }.start(); } } | cs |
스크린 샷

결론
1개의 Thread가 끝나기 전 여러개의 Thread가 List에 데이터를 입력한다면 첫번째 실행된 Thread에서 최신 데이터 반영
#CopyOnWriteArrayList #Thread safe #Thread 병렬 #Thread safe List