coding8282
1k
2017-11-23 09:26:48
5
639

멀티 쓰레드 이슈



소나큐브가 제시한 건데요, 여기서 static private Calendar calendar= Calendar.getInstance(); 가 왜 위험한 건가요?

0
0
  • 답변 5

  • LichKing
    14k
    2017-11-23 09:38:53
    저 코드 자체는 위험할게 없어보이는데 저걸 갖다쓰는 경우에 위험하다는것 같네요.
    1
  • 무명소졸
    5k
    2017-11-23 10:52:27

    클래스 변수(static) 으로 선언 하면 쓰레드 공유가 되니까요. 

    private 선어 되있어도 내부에서도 얼마든지 여러 쓰레드에 서 접근 가능한 코드를 짤수 있구요

    Calendar 객체 자체가 thread safe 하게 설계 되있지 않나 봅니다.

    1
  • GAN
    1k
    2017-11-23 11:50:45

    개인적은 경험입니다만 SimpleDateFormat 도 static 제거하시는 게 나을 것 같습니다.

    정확히 기억은 안 나지만 오래전에 매번 객체를 생성하는게 낭비라고 여겨서 SimpleDateFormat을 static 으로 만들어서 사용한 적이 있는데 테스트 시에는 큰 문제가 없었지만 실 서비스에서 문제가 생겨서 확인해보니 짧은 시간 내에 많은 요청이 들어올 경우 에러가 발생했던 걸로 기억합니다.

    검색해보니 로컬 변수로 사용하거나 Apache Commons 의 FastDateFormat 이나 Java 8 의 DateTimeFormatter 사용하라는 답변이 있네요.
    https://stackoverflow.com/questions/27674654/weird-date-parsing-error-in-java

    1
  • 잡초
    1k
    2017-11-23 12:18:50

    http://jeong-pro.tistory.com/71 

    참고 하시면 될거 같아요.ㅎ

    1
  • coding8282
    1k
    2017-11-23 16:58:18 작성 2017-11-23 16:58:29 수정됨
    "저도 객체를 매번 생성하는게 낭비"라고 생각이 들어서 저렇게 작성해놨거든요. static은 별 생각 안 하고 있었는데... 그런데 그런 이슈가 있군요.. 정말 감사드립니다. 주신 링크 잘 찹조하겠습니다. 다른 분들도 조언 감사드립니다~~. 당장 고쳐야겠네요
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.