게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[본삭금][JAVA] 스레드가 중지되면 생성자도 같이 소멸되나요?
게시물ID : programmer_21473짧은주소 복사하기
작성자 : 전벙글이예요
추천 : 0
조회수 : 558회
댓글수 : 2개
등록시간 : 2017/10/06 15:15:54
옵션
  • 본인삭제금지
안녕하세요.

자바 스레드 관련해서 질문드릴게 있습니다.

먼저 현재 상황은 아래와 같습니다.
==========================================================
A 클래스에 두개의 생성자가 있습니다. 
편의상 a1, a2 라고 부르겠습니다.

a1 생성자는 B클래스에서 호출합니다.
a2 생성자는 C클래스에서 호출합니다.

먼저 B클래스에서 a1 생성자를 호출합니다. 
아직 a2 생성자는 호출되지 않았습니다.

그리고 다음과 같이 B클래스에서 스레드를 실행합니다.

Runnable run1 = new A(a1);
Thread piRun1 = new Thread(run);
piRun1.start();

그리고 특정 조건이 되면 중지시킵니다
piRun.interrupt();

B클래스의 스레드가 중지가 되면 
C클래스에서 a2 생성자가 생성됩니다.

그리고 마찬가지로 C클래스에서 스레드를 실행합니다
Runnable run2 = new A(a2);
Thread piRun2 = new Thread(run);
piRun2.start();

이 경우에 B클래스에서 호출한 생성자 a1은 그대로 남아있는 것인가요?

아니면 스레드와 함께 자동으로 사라지는 것인가요?

아니면 따로 소멸자를 호출해서 없애줘야 하는 것인가요?

지금 코딩하는게 두개의 생성자가 동시에 존재하지 않게끔 만들어줘야하는 상황입니다.

현재 DataOutputStream NullPointerException 오류가 나오고 있는데

a1 생성자엔 output이 없고

a2 생성자엔 output 스트림이 있습니다.

여기서 오류가 난 것 같아 질문드려봅니다.


꼬릿말 보기
전체 추천리스트 보기
2017-10-06 20:32:25추천 0
자바는 모릅니다. 그러니까... 이것이 답인지 아닌지 확신이 없습니다. 그러나...
piRun.interrupt();
가 실행되어 쓰레드가 멈춘 후  piRun 오브젝트는 소멸하나요? 그렇지 않다고 합니다. 불필요한 piRun 오브젝트를 소멸시키는 것이 좋겠네요.
또는 B 클래스의 오브젝트를 더 이상 사용하지 않는다면 그것을 소멸시키던가요.

"When the run() method of that new thread finishes, aka the thread finished it's job. Does it delete itself? Or does it keep existing in the memory?

It mostly deletes itself. The thread stack is deleted, and the thread local map, the runnable and some other fields of the Thread object are nulled. But the Thread object will continue to exist as long as it is reachable. So if you want everything to go away when the Thread terminates, don't keep a reference to the Thread or the Runnable."
댓글 1개 ▲
2017-10-07 01:27:25추천 0
조언 감사드립니다.
말씀 해주신 것처럼 검색해보면 자바에선 소멸이라는 개념이 불확실하다는 말이 많아 자바에서 객체 소멸 호출을 하는건 지양한다고 합니다.
그래서 생성자 두개를 사용하는 것이 아닌 다른 로직을 강구해 갈아 엎고 방금 성공하고 왔습니다 ㅠ_ㅠ
남은 황금연휴 기간동안 즐거운 시간 보내시길 바랄게요!!
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호