2016-12-20 9 views
-2

ので、私は次のスレッドを作成しました:スレッドは2つのメソッドを同時に実行できますか?

public class test extends thread{ 
    public void run(){ 
     // Do stuff 
    } 
    public void onPause(){ 
     //Do stuff to prepare for pausing 
    } 
} 

が今私の質問は、このスレッドは現在、私はonPause(呼び出しメインスレッドからrun()メソッドと突然のすべてを実行していると仮定される)、その後それが希望run()の実行を停止してonPause()メソッドを実行するか、または両方を同時に実行しますか?

+0

なぜそれはないと思いますか? –

+1

'this'スレッドは' run() 'を実行します。 「メイン」スレッドは 'onPause()'を実行します。 2つのスレッド。それぞれが別々の命令シーケンスを実行します。 1つのスレッドは2つのことを一度に行うことはできませんが、2つのスレッドで行うことができます。 – ebyrob

答えて

1

あなたが指摘したように、メインスレッドからを呼び出しているため、それらは同時に実行されます。

+0

ああ撃った私はこれ以上私の頭を苦しめていた、そして今あなたはそれを持ってきた私は今それを見る。私は、onPause()を呼び出すと、実行中のスレッドがrun()を実行中にonPause()を呼び出すと考えていました。今それを見て、私はこれが非常にばかな質問であることに気づいた – JustCurious

+0

マルチスレッドは難しいことです。 –

0

概念的には、スレッドオブジェクトを実際のスレッドと混同するのは間違いです。スレッドはThreadオブジェクトに割り当てられます。そのため、Threadでのstartの呼び出しは、そのスレッドでThread(またはRunnableの)runメソッドを実行します。

スレッドは単なる別のオブジェクトであり、ロックを追加するなどのアクセスを制限しない限り、複数のスレッドがそのメソッドを実行するのを止めるものはありません。したがって、スレッドのrunメソッドは同時に呼び出すことができます。 runメソッドがisInterruptedのようにThreadのメソッドを呼び出すと、メソッドを実行しているスレッドの状態とは対照的にThreadオブジェクトの状態がチェックされます。 (Thread.currentThread()を使用すると、実行中のスレッドにアクセスします)

スレッドを拡張せず、代わりにRunnableまたはCallableを実装するという利点の1つは、混乱の余地が少しあります。スレッドメソッドを継承しません。

関連する問題