Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- try width resources
- 레퍼런스 복사
- CSS
- 과제의 분리
- 도파민형 인간
- node
- 쿠버네티스
- docker
- sentry
- apache kafka
- 이펙티브 자바
- HTML
- 참조 계수
- 수부타이
- try-with-resources
- 아웃풋법칙
- 비메모리 자원
- 칭기즈칸의 위대한 장군 수부타이
- Infresh
- 공헌감
- java
- 월칙
- 모두가 기다리는 사람
- kubernetes
- 히든 스토리
- colllection
- 뉴 컨피던스
- ESG
- Container
- 부자의그릇
Archives
- Today
- Total
Hi
Java의 잘못 설계된 라이브러리의 특징 (멀티 스레드 안정성) 본문
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 |