2つのスレッドを持つマルチスレッドプログラムを作成しようとしています。最初のコマンドは "新しい"コマンドのプロンプトが表示された後にランダムアクセスファイルを更新し、2番目のコマンドは "new"または "end"コマンドを受け付けて最初のスレッドに送信します。私は、セマフォーによって制御されるキューを使用したいと思っていました。私はちょうど他のスレッドを関連付ける方法を知らない。一方のスレッドはユーザーコマンドから文字列を生成してキューに挿入し、もう一方のスレッドは文字列をキューから取り出してダイレクトアクセスファイルに書き込みます。スレッドの開始方法を教えてもらえますか?マルチスレッドプログラムの2番目のスレッドの作成に問題があります
package multi_threaded_producer_consumer;
import java.util.concurrent.Semaphore;
public class MTQueue {
private Semaphore sem = new Semaphore(1);
private java.util.Queue<String> statQ;
public static void main(String[] args) {
}
public MTQueue(){
statQ = new java.util.LinkedList<String>();
}
public void MTPut(String qe) {
try {
sem.acquire();
statQ.offer(qe);
} catch(InterruptedException ex) {
} finally {
sem.release();
}
}
public String MTGet() {
String retVal = new String();
try {
sem.acquire();
retVal = statQ.poll();
} catch(InterruptedException ex) {
} finally {
sem.release();
}
return retVal;
}
}
あなたは文字通りどのようにJavaでスレッドを書くことを求めている:あなたはそれをキャッチすると、あなたは常に、少なくとも現在のスレッドを中断する必要がありますか?新しいスレッド(myRunnable).start()です。ここで、myRunnableは、スレッドが実行したいものを実行する実行機能を持つクラスです。他に何かを求めているなら、もっと明確にしよう。 –
@GabeSechan私はそれを別のクラスに入れたり、すでに書いたものの中に追加しますか?これらは多分疑問な質問ですが、私は本当にマルチスレッドの使用の理由を理解していません。 – Chief
'InterruptedException'(または他の例外)を飲み込むことは悪い癖です。あなたのプログラムが中断されることを期待しておらず、中断した場合に何が起こっても気にしない場合は、 'run runtimeException(ex);をスローするだけです。 –