2010-06-07 5 views
2

스레드 관련 문제가 있습니다. 나는 runnable을 구현하는 클래스를 가지고 있는데, 나는 그 클래스에서 thread.start() 메소드를 사용할 수있다. 내 문제는 내가thread.start()와 executor.submit (thread)의 차이점

사람이 thread.start()executor.submit(thread)의 차이가 무엇인지 말씀 해주십시오 수 (스레드) .. executor.submit를 호출 할 수있는 또 하나 개의 클래스 java.util.concurrent.ExecutorService ...

답변

4

집행자가있다. submit 메소드는 Thread가 아닌 Runnable을 취합니다. executorService의 요점은 스레드를 생성하고 풀링하는 것을 제어하므로 호출하는 코드가 그렇게 할 필요가 없다는 것입니다.

1

실행 프로그램에 스레드를 제출하지 마십시오. 먼저 불리는 유일한 방법은 run()이므로 Runnable이 필요하고 Thread이 필요하지 않기 때문에 낭비 일뿐입니다. 이 문제는 최신 JDK에 해결하는 동안

차, 당신이 Thread 객체를 많이 만들고 그들에 .start()를 호출하지 않으면 메모리 누수 문제가 발생하는 경우로 사용됩니다. 기본적으로 Thread 개체를 만들면 .start()이 호출 된 후에 만 ​​다시 확보 할 수있는 메모리가 할당됩니다. 따라서 executor.submit(thread)을 수행하는 것은 초기 JDK에서 잠재적으로 위험합니다 (JDK6에서만 해결 된 것 같습니다).

executor.submit (thread)가 유효하지 않습니다. executor가 자체 스레드를 사용하여 runnable을 실행하기 때문에 이것은 잘못되었습니다. 유언 집행자를 사용하는 것이 모든 시점 이후입니다. 작업 (호출)과 실행을 분리하려고합니다. 실행 프로그램 (스레드)을 제공하려는 경우에만 Thread을 사용해야하지만 그렇게해야하는 경우는 거의 없습니다. 일반적으로 Thread을 다루는 대신 Runnable을 구현하고 실행 프로그램을 사용하여 실행하는 것이 좋습니다.