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();
}
}
}