bugfix> java > 投稿

によるAndroidのドキュメント:

When code running in some thread creates a new Thread オブジェクトの場合、新しいスレッドの優先度は、最初は作成中のスレッドの優先度と同じに設定され、デーモンスレッドです場合に限り作成スレッドはデーモンです。

式を使用するのは正しいですか「もしも​​」ここに?

を使ってデーモンスレッドを作れると思いました setDaemon(true) 、メインスレッドが非デーモンスレッドであっても。

コンセプトを誤解していないか知りたい。


これが私が試したコードです:

public class MyClass {
    public static void main(String[] args) {
        boolean isDaemon;
        isDaemon = Thread.currentThread().isDaemon();
        System.out.println("Is main thread daemon?:" + isDaemon);
        new WorkerThread(true).start();
    }
}
class WorkerThread extends Thread {
    public WorkerThread(boolean tf) {
        setDaemon(tf);
    }
    public void run() {
        boolean isDaemon;
        isDaemon = Thread.currentThread().isDaemon();
        System.out.println("Is worker thread daemon?:" + isDaemon);
    }
}

回答 1 件
  • あなたの理解は正しいですが、ドキュメントも正しいです。

    新しいスレッドを作成すると、作成中のスレッドからデーモンの状態が継承されます。この時点で、新しいスレッドはデーモンになります。場合に限り作成するスレッドもデーモンです。

    その後、あなたは呼び出すことができます setDaemon(...) デーモンの状態を変更しますが、元のクレームが無効になることはありません。元の主張は基本的にスレッドの作成についてのみであり、将来のライフサイクル/構成については話していません。

    問題のコードは、デーモンフラグの変更を別の場所に移動するだけです。あなたが電話するとき setDaemon(tf); スレッドはすでに非デーモンとして構成されており、その構成を変更するだけです。アンドロイド仕様はについてのみ話していることに注意してください Thread 、技術的には、あなたが扱っているので、ドキュメントはあなたのケースでは完全に無関係です WorkerThread 。事実上、もちろんほとんどのドキュメントは依然として当てはまりますが、デーモンの状態を継承するスレッドに関する記述は、その動作を明示的に変更したため、もはや当てはまりません。

あなたの答え