2012-03-14 2 views
2

그래서 호스트와 클라이언트가있는 Android 블루투스 애플리케이션이 있습니다. 문제는 다중 연결을 만들기 때문에 각 연결을 처리하는 스레드가 필요하다는 것입니다. 그게 모두 우유가 아니 거든. 그래서 모든 스레드를 배열에 집어 넣을 줄 알았다. 약간의 연구에 따르면이 작업을 수행하는 더 좋은 방법은 스레드 풀 (Thread Pool)을 사용하는 것이지만, 어떻게 작동하는지에 대해서는 머리를 맞지 않는 것처럼 보입니다. 또한 실제로 어레이에 스레드를 보유 할 수 있습니까?여러 개의 블루투스 처리 스레드를 관리하는 Android 스레드 풀?

+0

. 그들은 단지 대상입니다. – Gray

답변

2

스레드 풀은 반복적으로 스레드를 만드는 작업은 시간이 오래 걸리기 때문에 가능한 한 많이 재활용하려고해야한다는 아이디어를 바탕으로 작성되었습니다. 따라서 스레드 풀은 작업을 실행하지만 스레드가 작업을 마쳤을 때 소멸되지 않고 대신 "풀로 돌아가십시오"라는 스레드 모음이며 다른 작업을 수행하거나 수행 할 필요가없는 경우 유휴 상태로 있습니다.

일반적으로 기본 구현은 프로그래머가 작업을 넣고 구현에 의해 관리되는 스레드 묶음이 폴링을 유지하는 (작업량이 많다는 의미는 아닙니다) 작업 대기열입니다. 스레드 풀은 ExecutorService 클래스에 의해 표현되는 자바에서는

가 될 수있는 :

  • 고정 - 스레드의 고정 된 수의
  • 캐시와 스레드 풀을 생성 - 동적으로 생성하고 스레드를 파괴 필요에 따라
  • 단일 - 단일 스레드

주와 풀 스레드 풀 스레드 번째에서 (즉, 재활용되는) 상술 된 방식으로 동작 때문에 고정 된 스레드 풀의 경우 입출력 작업을 차단하는 작업은 수행하지 않는 것이 좋습니다. 그 작업을 수행하는 스레드는 작업이 끝날 때까지 효과적으로 제거되어 교착 상태가 발생할 수 있기 때문입니다. 스레드의 배열로

는, 어떤 객체 배열을 만드는 것만 큼 간단합니다 : 당신은 배열 또는`List`에`Thread`s을 넣을 수 있습니다

Thread[] threads = new Thread[10]; // array of 10 threads 
+0

답장을 보내 주셔서 감사합니다. 캐시 된 스레드 풀을 사용하고있을 것입니다. 또한 모든 스레드가 지속적으로 실행되며 각 호출에 블로킹 호출이 생깁니다. 여전히 스레드 풀을 사용해야한다고 생각합니까? – Zizo47

+0

사용 가능한 스레드가 더 이상없는 경우 새 스레드를 생성하므로 캐시 된 스레드 풀을 계속 사용할 수 있습니다. 일반 스레드와 관련하여 이점은 관리가 더 쉽다는 것입니다. – Tudor

+1

"일반 스레드"란 무엇입니까? 스레드 풀은 배열처럼 스레드를 저장하지 않습니까? 아니면 스레드 풀 자체가 스레드입니까? – Zizo47