Java ThreadSafe한 동시성과 병렬성

List, Set, Map

Featured image
Collection    
List 순서있음, 중복가능 Vector, ArrayList, LinkedList
Set 순서있음, 중복불가능 HashSet, Linked HashSet, SortedSet, TreeSet
Map Key, 와 Value값을 지님 HashTable, HashMap, SortedMap, TreeMap

동시성

싱글 코어에서 멀티 Thread를 동작 시키기 위한 방식

병렬성

멀티 코어에서 멀티 스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질을 말함.
데이터 병렬성과 작업 병렬성으로 구분된다.

Import Package Lists

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

Thread Safe한 컬렉션

public class ThreadSafeCollection {

	public static void main(String[] args) {
		// Vector, HashTable 은 ThreadSafe 하다.
		// ArrayList, HashSet, HashMap은 ThreadSafe 하지않다. 따라서,
		// 이를 위해 synchronizedXXX() 메소드를 활용해 threadSafe하게 만들어 준다.
		// 점유하고 있는 스레드가 존재 한다면 다른 스레드는 점유 스레드가 작업을 완료하기 전까지 점유 할 수 없다.
		
		// 쓰레드 세이프 한 컬렉션 List
		List<Person> list = Collections.synchronizedList(new ArrayList<Person>());
		list.add(new Person("신", 27));
		
		// 쓰레드 세이프 한 컬렉션 Set
		Set<Person> set = Collections.synchronizedSet(new HashSet<Person>());
		set.add(new Person("신", 27));
		
		// 쓰레드 세이프 한 컬렉션 Map
		Map<String, Integer> map = Collections.synchronizedMap(new HashMap<String, Integer>());
		map.put("신", 27);
	}
}

병렬처리를 위한 컬렉션

public class ConcurrentExam {

	public static void main(String[] args) {
		// 병렬 처리용 Map
		Map<Integer, String> map = new ConcurrentHashMap<Integer, String>();
		map.put(1, "신");
		
		// 병렬 처리용 Queue
		Queue<Message> msgQuene = new ConcurrentLinkedQueue<Message>();
		msgQuene.add(new Message("SMS", "신"));
	}
}