2010-01-10 2 views
3

박람회 :Java Threads에 대해 생각하는 방법? 일명 Thread.stop

나는 자바 VM이 굉장하다고 생각한다. 바이트 코드, 표준 라이브러리의 안전성을 보장합니다 ... 놀라운 점은 자바 클래스를 즉시로드 할 수있는 능력과 VM을 충돌시킬 수 없다는 것입니다 (* .so 파일 또는 커널 모듈). 자바를 처리하는 방법을 이해하지 않습니다

한 가지, 내가 http://java.sun.com/j2se/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html 을 읽은 Thread.stop를

이지만 다음과 같은 이유로 이상한 것 같다

1) 자원 관리

유닉스 OS에서, 프로세스가 자원을 늘리고 있다면, 나는 그것을 죽일 수있다. 추상화의

2 ) 속보는 :

나는 많은 계산 작업을 시작하면, 나는 더 이상 계산을 필요로하지, 내가 죽일 수 -9를. 이 Java 스레딩 모델에서 내 계산 스레드은 정기적으로 부울 플래그를 확인하여 종료해야하는지 여부를 확인해야합니다. [이것은 추상화 레이어를 깨뜨린 것처럼 보입니다. 계산 코드를 작성할 때 계산 코드에만 집중해야합니다. 어디에서 종료해야하는지에 대한 점검을 펼칠 곳. 잠금의

3) 안전/모니터

그래서 공식적인 이유는 "어떤 스레드가 잠금/모니터를 보유하고 Thread.stopped을 가져옵니다 객체가 손상된 상태로 남아있을 것입니까?"입니다 - 아직 , 운영 체제에서 이것은 문제가되지 않습니다. 우리는 인터럽트 핸들러를 가지고 있습니다. 자바 쓰레드가 OS 인터럽트 핸들러처럼 작동하는 인터럽트 핸들러를 가질 수없는 이유는 무엇입니까?

질문 : 분명히

, 나는 잘못된 정신 모델과 자바 스레드에 대해 생각하고있다. 자바 스레드는 어떻게 생각해야합니까?

감사합니다.

답변

6

기억해야 할 핵심 사항은 스레드가 프로세스가 아니라는 것입니다. 스레드가 "소유"하는 유일한 것은 실행 스레드입니다. 다른 모든 스레드는 잠재적으로 동일한 프로세스 (메모리 공간) 내의 다른 스레드와 공유 될 수 있기 때문입니다. 다른 스레드가 처리 할 수있는 것들이 여전히 유효하기 때문에 스레드를 중지해도 아무 것도 정리할 수 없습니다.

운영 체제 프로세스에서 OS는 프로세스가 보유한 모든 프로세스 (메모리, 파일, 잠금 등)를 추적하고 프로세스를 알리는 신호를 올바르게 정리합니다.

2

당신은 혼란스러운 스레드와 프로세스 인 것 같습니다.

자원 (할당 된 메모리, 잠금 장치, 파일 핸들 등)은 프로세스의 특정 스레드가 아닌 프로세스에 속합니다. 스레드의 전체적인 포인트 (위험)는 동일한 프로세스 내의 여러 스레드가 리소스를 공유한다는 것입니다.

따라서 단일 스레드에 속한 리소스에 관해 이야기하는 것은 의미가 없습니다.

ps : 저는 kill/kill -9를 사용하여 Linux에서 스레드를 죽일 수 없다고 확신합니다. kill에 대한 man 페이지는 프로세스 또는 프로세스 그룹 만 죽일 수 있다고 말합니다.

+0

나는이 두 가지를 혼동합니다.JVM이 프로세스를 제공하지 않는 이유에 대해 직관적으로 알고 있으며 스레드 만 제공합니까? – anon

+1

@anon : JVM 자체가 (실행 중일 때) 프로세스이고 운영 체제가 아니기 때문에. 프로세스가 추가 프로세스를 제공 할 수 없습니다. 사실 JVM은 실제로 스레드를 제공하지 않습니다. JVM이 스레드를 시뮬레이트하지 않는 한 스레드를 추상화하지만 프로세스에 스레드를 제공하는 것은 기본 OS입니다. –

관련 문제