まだ頭を糸に巻き付けるのに問題があります。可能な限り簡単な方法でこれを実行しようとしています。スレッドはすべて、Runnableクラスから継承したrunメソッドを持っている必要があることを知っていますが、追加のメソッドも持つことができますよね?
その理由は、いくつかのプライベート変数とrunメソッドを持つスレッドがあるからです。それはrun関数を呼び出します、そしてそれが終わったら、私はまったく同じrunメソッドでスレッドを再利用したいと思います。変数が異なるだけで、まったく同じことを行います。したがって、setArrayメソッド(スレッドにはプライベートバイト配列が含まれています)のようなものを追加して、この新しい配列を使用してrunを再度呼び出すことができますか、それとも許可されていません。簡単に言えば、
Thread thread = new MyThread();
thread.start();
// Check if the thread has finished in a non-blocking way
if (thread.isAlive() == false) {
thread.setArray(newArray)
thread.start();
}
基本的に私は固定数のスレッドしか持っておらず、最初のスレッドの実行が完了したら、パラメーターを少し変更して再度実行したいと思います。私は彼らが死ぬことを望んでいません、それはjoinがすることのようです。
特定の問題については、4つのスレッドがあり、それぞれがより大きなバイト配列の設定されたサイズのブロックを提供します。各スレッドはその配列をDeflaterで圧縮し、その結果を同期を処理するマネージャーオブジェクトに渡します。最初のスレッド(配列の最初の部分を取得したスレッドのように、最初に終了したスレッドではない)が完了すると、スレッドに割り当てられていない次のブロックに移動します。
私はスレッドプールがオプションであることを知っていますが、それは少しやり過ぎのようです、そして私は本当にそれらを理解していません(私はまだ通常のスレッドだけで問題を抱えています)。