2012-03-14 8 views
2

私は自分のAndroid Bluetoothアプリケーションにホストとクライアントを持っています。問題は、複数の接続を作成しているため、各接続を処理するためのスレッドが必要です。それはすべてミルククッキーだから、すべてのスレッドを配列に張っておくと思った。少しの研究では、スレッドプールを使用するより良い方法があると言われていますが、私はそれがどのように機能するかについて頭を悩ますことはできません。また、実際に配列内にスレッドを保持することも可能ですか?複数のBluetoothハンドリングスレッドを管理するAndroidスレッドプール?

+0

あなたは、配列または 'List'に' Thread'sを置くことができます。それらは単なるオブジェクトです。 – Gray

答えて

2

スレッドプールは、何度も何度もスレッドを作成するのは時間がかかるため、可能な限りリサイクルするようにしなければなりません。したがって、スレッドプールはジョブを実行するスレッドの集合ですが、ジョブが終了すると破棄されるのではなく、プールに戻って別のジョブを実行するか、何もしなければアイドル状態になります。

通常、基本的な実装は、プログラマがジョブを投入し、実装によって管理されるスレッドの束がポーリングを維持する(私は忙しく回転しているとは必ずしも言いません)。スレッド

  • キャッシュされた固定数でスレッドプールを作成する - -
  • を必要に応じて動的に作成し、スレッドを破壊固定

    • :スレッドプールがあってもよいExecutorServiceクラスによって表されるJavaでは

    • 単一 - スレッドプールのスレッドが目に、(すなわちが再利用される)上記のように動作するので、その単一スレッド

    注とプール固定スレッド・プールの場合、I/O操作をブロックするジョブは、ジョブを終了するまで効果的にプールから除去されるため、デッドロックが発生する可能性があるため、推奨されません。スレッドの配列については

    、それは任意のオブジェクトの配列を作成するのと同じくらい簡単です:

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

    あなたの答えをありがとう、私はおそらくキャッシュされたスレッドプールを使用しているでしょう。また、私のスレッドはすべて常時稼働しており、それぞれにブロッキングコールがありますが、スレッドプールを使用する必要があると思いますか? – Zizo47

    +0

    利用可能なスレッドがなくなると新しいスレッドが作成されるため、キャッシュされたスレッドプールを引き続き使用できます。通常のスレッドに関しては、管理が容易であるという利点があります。 – Tudor

    +1

    「通常のスレッド」とはどういう意味ですか?スレッドプールは配列のようにスレッドを格納するだけではありませんか?または、スレッドプール自体がスレッドですか? – Zizo47

    関連する問題