2017-01-11 4 views
1

スレッドを実行したいときはスレッドを解放します。スレッドAが死んだときにスレッドAの内部でスレッドBの動作が発生する

私はメインスレッド

Thread mainThread = new Thread(() -> { 
    //do things 
    doAction(); 
    //do other things 
}); 

及び方法doAction()は、今ではmainThreadの実行中にinsideThreadが実行されることになります

public void doAction(){ 
    Thread insideThread = new Thread(() -> { 
     //do something 
    }); 

    insideThread.start(); 
} 

のように見えています。

mainThreadが死んだり解放されたりすると、insideThreadはどうなりますか?

が死んだり解放された瞬間に、私はスタートinsideThreadが欲しいです。

答えて

3

簡易ソリューション:変更doAction()返信そのスレッドは作成中です。その結果、コードを呼び出すと、そのスレッドでstart()を呼び出すことができます。このように:もちろん

public Thread doAction(){ 
    Thread insideThread = new Thread(() -> { 
    //do something 
    }); 

    return insideThread; 
} 

、あなたはそれが物事自体を「行う」しないことを示すためにprepareAction()のようなものに、そのメソッドの名前を変更します。

編集:これはです。要件を実装するには、オプションを使用します。重要なことは:そのメソッドが値を返すかどうかにかかわらずです。 コントロール他のスレッドMからのスレッドT、MはそのTへの参照を必要とします。ここには魔法はありません。どのオブジェクトでも "管理できます" "他のオブジェクト何とかそれに知られている!

+0

コードはTasksより前にある可能性があるので、私はこの答えが好きですが、async/awaitとTasksの例も追加することをお勧めします。 – HouseCat

+0

@RagingCainありがとうございます。良いアイデアのように聞こえます。しかし、私が今日そこに着くかどうかはわかりません。私の答えを編集して改善してください。今私は、私が感謝している賞賛者が贈収賄を試みたように見えるかどうかについて言及しているかどうか疑問に思っています;-) – GhostCat

関連する問題