による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);
}
}
関連した質問
- 電卓アプリでDecimalFormatのエラーを解決する方法
- recyclerview内の要素に対してマージンが機能しないのはなぜですか?
- Androidプロジェクトで使用されるJARからのロギング
- NordicThingy:52を使用したAndroid BluetoothGATTタイムアウト
- 応答を処理するKotlinRetrofit
- AlertDilogからMainActivtyにデータリターンを渡します
- RectFがCanvasの境界線から外れます
- (解決済み)デフォルトのandroid RecyclerView ViewHolder NPE shouldIgnore()
- GPIO制御にJavaクラスを使用して、AndroidOSで実行されるアプリケーションを作成する方法
あなたの理解は正しいですが、ドキュメントも正しいです。
新しいスレッドを作成すると、作成中のスレッドからデーモンの状態が継承されます。この時点で、新しいスレッドはデーモンになります。場合に限り作成するスレッドもデーモンです。
その後、あなたは呼び出すことができます
setDaemon(...)
デーモンの状態を変更しますが、元のクレームが無効になることはありません。元の主張は基本的にスレッドの作成についてのみであり、将来のライフサイクル/構成については話していません。問題のコードは、デーモンフラグの変更を別の場所に移動するだけです。あなたが電話するとき
setDaemon(tf);
スレッドはすでに非デーモンとして構成されており、その構成を変更するだけです。アンドロイド仕様はについてのみ話していることに注意してくださいThread
、技術的には、あなたが扱っているので、ドキュメントはあなたのケースでは完全に無関係ですWorkerThread
。事実上、もちろんほとんどのドキュメントは依然として当てはまりますが、デーモンの状態を継承するスレッドに関する記述は、その動作を明示的に変更したため、もはや当てはまりません。