4

スレッドを使用して 2 ~ 3 日が経ちましたが、メソッドに関する簡単な質問があります。私は Android アプリケーションを作成しており、それはメインの UI スレッドから始まります (わかりやすくするために「UI スレッド」と呼びましょう)。次のコードを使用して新しいスレッドを生成しています。

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        someMethod();
    }

});
thread.start();

私の質問は、someMethod()そこから呼び出しているため、作成したばかりの新しいスレッドでも実行されるのですか? それとも、UI スレッドで実行されますか? 参考までに、someMethod()は新しいスレッドを作成しているメソッドの外側にあります。

新しいスレッドで実行されない場合someMethod()、どうすれば実行できますか? ありがとう。

4

3 に答える 3

6

そこから呼び出しているので、作成したばかりの新しいスレッドでも someMethod() は実行されますか?

はい、まさにそれが起こります。メソッドは単なるコードです。特定の時点で実行されている制御スレッドとは無関係です。これは、複数の CPU/コアがある場合、任意の時点でそのコードを実行する複数のスレッドが存在する可能性があることも意味します。

于 2013-09-11T22:43:51.840 に答える
2

Callable<V>とを見てください。呼び出し元のスレッドで処理されないFuture<T>メソッドを呼び出すことができます。とにかく、今日ではスレッドを操作するべきではありません。利用可能なより現代的なアプローチがあります。

これは、アイデアを提供するリンクですhttp://www.vogella.com/articles/JavaConcurrency/article.html#futures

于 2013-09-11T23:34:13.500 に答える
1

runの呼び出しを含む、によって実行されるすべてのアクションは、そのコードが Java に別のスレッドで何かを実行するように指示しない限り ( を使用したり、 を使用したりして) someMethod、 new にとどまります。ThreadinvokeLaterExecutor

于 2013-09-11T22:45:00.580 に答える