2014-11-08 5 views
1

많은 웹 페이지를 여는 웹 크롤러를 작성했습니다. 아래 이미지에서 볼 수 있듯이 일부 스레드가 완료된 것처럼 보입니다 (흰색 색상). 그러나 이것이 의미하는 것은 무엇입니까? 내가 몇 가지 버그가 있니? 자원이 누출 되었습니까? 그리고 어떻게 스레드가 생성되고 왜 완료되는지에 대한 아이디어를 얻을 수 있습니까? 나는 그들에 대해 걱정해야합니까?끝난 스레드 : 나는 그들을 무시해야합니까?

VisualVM

문제는 내가 그것을 하루 동안 계속 실행하면, 내가 그 수천 개의 스레드를 얻을 수 있다는 것입니다, 그래서 그것에 대해 걱정 해요.

+0

하루 동안 점점 더 많은 쓰레드를 만들어 내고 절대로 쓰러 뜨리면 절대로 누출 될 수 있습니다. 코드가 작업을 완료 한 후에 코드가 찢어 졌다고 단언하는 단위 테스트를 작성합니다. –

답변

2

너무 많은 스레드가 동시에 존재하지 않는 한 많은 스레드를 시작하는 것이 좋습니다. "Finished"스레드는 더 이상 생존하지 않으므로 문제가 발생하지 않습니다.

자바 스레드는 생성하는 데 다소 비용이 많이 든다 (Erlang과 같은 다른 언어에서는 다를 수 있음). 일반적으로 자바 스레드는 생성하는 동안 많은 스레드를 생성 할 필요가 없습니다. 앱의 삶. 스레드 풀을 사용하고자 할 수 있습니다. 이렇게하면 새 스레드를 여러 번 시작하는 대신 스레드를 다시 사용합니다.

1

완료된 스레드로 인해 응용 프로그램이 종료되지 않습니다. 그러나 우리가 마칠 새로운 쓰레드를 만드는 대신 그것들을 재사용 할 쓰레드 풀을 사용하십시오.