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
- docker
- 비메모리 자원
- colllection
- kubernetes
- 칭기즈칸의 위대한 장군 수부타이
- try-with-resources
- java
- 공헌감
- apache kafka
- 수부타이
- 이펙티브 자바
- Container
- 뉴 컨피던스
- node
- CSS
- sentry
- Infresh
- HTML
- 히든 스토리
- 아웃풋법칙
- 모두가 기다리는 사람
- ESG
- 월칙
- 도파민형 인간
- 쿠버네티스
- 과제의 분리
- 부자의그릇
- 참조 계수
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 |