2016-12-17 5 views
0

まず、メインクラスに文字列配列がありますスレッドで文字列配列を計算する

2つのスレッドを使って同じタスクを完了したいと思います。

質問1:文字列配列全体をスレッドに渡すことはできますか?または文字列[0]、文字列[2]などを渡すことはできますか?

質問2:私はマージする必要があり、私は

multiThreaded.multiThreadedRunnable

クラスを持っている:私は、同じ文字列に

質問3を読んで2つのスレッドを避けることができるように、文字列の読み方に関しては本当に混乱しています2つのファイルを1にするか、2で作業を続けることができますか?

答えて

1

Quistion 1,2:配列全体、および範囲などを渡し

public void doIt(String[] arr, int beging, int end){ 
    for(int i = begin; i < end; i++){ 
      //place your implementation 
    } 
} 

質問3:あなたは、あなたがメソッドを同期使用する場合は違いは見られません彼らに

をマージする必要はありません。このメソッドはロックされ、他のメソッドは待機する必要があるためです。 volatile最新の値countを持っていて、何ができるかの方法

+0

追加「hugeStringを見てください、私はSkandiumを知っているが、私は他の人

があると確信しています"と"範囲 " - (開始と終了)をインスタンス変数として使用します。 'multiThreadedRunnable'でそれらを初期化します。 「threadRunnable」に「doIt」メソッドを配置し、楽しくてください! –

0

から​​を除去するためのスレッドに仕事を分けている - countでください。例えば、ゼロからhugeStringsize()/ 2までの計算と、中間から終わりへの1つのスレッドを計算し、結果を追加します。複数のスレッドで何かを読むのはスレッドセーフですが、何かを変更することはできません。

0

実装しようとしているのはファームです。あなたの場合、共有データ構造(一般にデータ並列計算と呼ばれます)の場合、パラレルな独立した計算をモデル化するのは基本algoritmic skeletonです。

2つのクラスは、最初はエミッタ/コレクタとして機能し、2つ目はワーカーの実装(通常は2以上の場合がある)として分離しておく必要があります。

「オーバーラップ」問題については、文字列配列と2つのインデックス、つまり開始点と終了点を各ワーカーに渡す必要があります。コレクタ部分(join()コールの後)は、ワーカーによって受信されたデータを収集し、結果を合計して合計カウントを取得する必要があります。

ちなみに、手作業でコードを作成するよりもはるかに簡単な方法でこれを行うためのフレームワークがあります。 Java用のこのtutorial(それはC/C++ algoritmicスケルトンフレームワークのためだが、基本的な考え方は同じである)

関連する問題