2012-05-11 4 views
1
Thread runnableInst = new Runnable(){ public void run(){}}; 

Thread thread1 = new Thread(runnableInst); 
Thread thread2 = new Thread(runnableInst); 

thread1.start(); 
thread2.start(); 

의 동일한 인스턴스를 전달하여 두 개의 스레드를 생성 동일한 개체 runnableInst에 두 개의 스레드를 시작하는 좋은가요?의 Runnable

이런 종류의 디자인을 만드는 것이 좋습니까?

+0

'Thread runnableInst = new Runnable() {public void run() {}};'스레드는 이미'Runnable'입니다. 이 코드는 혼란 스럽습니다. – CKing

답변

2

예,이 작업을 수행 할 수 있지만 두 스레드가 runnableInst의 인스턴스 데이터에 액세스한다는 것을주의해야합니다. 따라서 필요한 경우 액세스가 동기화되어 있는지 확인해야합니다.

+0

변수가 엄격하게 로컬 변수 인 경우 다른 스레드에 영향을주지 않습니다. 각각은 자신의 메소드 스택을 가져야하며, 따라서 자신의 변수를 가져야한다. – Dale

1

그렇게하는 데는 문제가 없습니다. 그러나 많은 병렬 작업을 파견 할 계획이라면 ExecutorService API를 사용하는 것이 좋습니다.

0

실제로 가능합니다. 나는 그것이 대부분의 상황에서 좋거나 좋은 디자인이라고 생각하지 않는다. Runnable 인스턴스는 잘 정의되고 안전한 방법을 통해 다른 스레드와 데이터를 공유하는 코드 조각으로 간주됩니다.

+0

더 많은 정보를 추가하거나 가능한 경우 링크를 공유해주십시오. –

+0

큰 주제입니다. Java 동시성에 관심이 있다면 Java Concurrency in Practice를 읽어야합니다. 이 분야의 책입니다. –

0

동일한 Object runnableInst에서 두 개의 스레드를 시작하는 것이 좋습니까?

예, 동일한 Object runnableInst에서 두 개의 스레드를 시작하는 것이 좋습니다.

이런 종류의 디자인을 만드는 것이 좋습니까? 사용 사례에 따라 다릅니다. 예를 들어 공유 리소스에 대한 읽기/쓰기와 관련된 것이 없다면 좋은 디자인입니다.