Hi

Java의 잘못 설계된 라이브러리의 특징 (멀티 스레드 안정성) 본문

Programming/Java

Java의 잘못 설계된 라이브러리의 특징 (멀티 스레드 안정성)

SharingWorld 2018. 3. 29. 10:48
스택을 만들어보자

Vector, HashTable, StringBuffer
=> 멀티 스레드 안정성
잘못 설계된 라이브러리의 특징
: 동기화의 정책을 라이브러리가 결정하면 안된다.

List, Map, StringBuilder

스레드 안정성이 없다.
int n = 0;
++n;
=> 원자적이지 않기 때문에, 문제가 발생한다.

import java.lang.ref.SoftReference;

class User {
	private String name;
	private int age;

	private String cache = null;

	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		if (cache == null) {
			cache = "User{" +
			"name='" + name + '\'' +
			", age=" + age +
			", cache='" + cache + '\'' +
			'}';
		}

		return cache;
	}

	void foo() {}
}

public class Program_0123 {
	public static void main(String[] args) {
		User user = new User("Tom" , 42);
		user.foo();

		SoftReference<User> wp = new SoftReference<>(new User("Tom", 42));
		User sp = wp.get();
		if (sp != null) {
			sp.foo();
		}

	}
}

'Programming > Java' 카테고리의 다른 글

Buffer와 Cache  (0) 2018.03.29
Java 최선의 프로그래밍 지침  (0) 2018.03.29
스택을 만들어보자  (0) 2018.03.29
Iterator의 순회  (0) 2018.03.28
추상클래스와 인터페이스의 차이점  (0) 2018.03.28