multithreading - Java:LockSupport.parkNanosとThread.sleep(...)



(4)

場合によっては、ほとんどの人が次のようなことを書いています。

try {
   Thread.sleep(2000); 
} catch (InterruptedException e) {
   ; // do nothing
}

正しいかどうか、いくつかのテストハーネスでしか受け入れられないかどうかは、私の指摘ではありません。 私の指摘は、同じコードを、より簡潔に書くことができることです。

  LockSupport.parkNanos(2000* 1000000);

私が他のアプローチよりも1つのアプローチを好むべき理由があります。


Answers

読みやすさ: Thread.sleepはかなり直感的な意味を持っています。 LockSupport.parkNanos使用方法を(他の開発者に)どうLockSupport.parkNanosますか? その説明が主に「私は現在のスレッドスリープ状態にします 」としている場合は、確実にThread.sleepが説明的です。

その簡潔さは、割り込み処理の欠如に由来します。そのため、必要に応じてこれを実行するためのラッパーメソッドを作成し、例外をRuntimeExceptionとして伝播します。 ちなみに 、ラッパーメソッドを作成している場合は、どちらの実装でも使用できますが、別のスレッドでは、「スリープ」スレッドを中断するのと同じ方法で解除できます...


メソッドparkNanosのドキュメントは、メソッドが返すことができる条件を提供します。 これらの条件のうちの1つは、コールが偽りに(すなわち理由なしで)返されることです。 だから基本的には、偽の目覚めや他のスレッドが待っているスレッドを考慮しないように気を付けなければ、それを使っても問題ありません。 もちろん、Jonのコメントは、他のものを好む理由をかなり釘付けにしています。


LockSupportははるかに限定されたアプリケーションを持ち、例外処理をサポートしていません。 単一のスレッドのみをロックする必要がある場合は、OKです。

APIから:

これらのメソッドは、より高度な同期ユーティリティを作成するためのツールとして使用されるように設計されており、ほとんどの同時実行制御アプリケーションにとって有用ではありません。


文字列をint型に変換することは、数値を変換するより複雑です。 あなたは次の問題について考えています:

  • 文字列には0〜9の数字しか含まれていませんか?
  • 何が起きているか- / +文字列の前か後? それは可能ですか(会計番号を参照してください)?
  • MAX_- / MIN_INFINITYは何ですか? 文字列が999999999999999999の場合はどうなりますか? マシンがこの文字列をintとして扱うことはできますか?




java multithreading