スレッド間で共有される可能性のある java.util.concurrent.ThreadLocalRandom インスタンスを報告します。

ThreadLocalRandom はスレッドセーフではないため、スレッド間で共有すべきではありません。 このインスペクションは、メソッド引数として使用されるフィールドに代入されるインスタンス、またはローカル変数に代入されてスレッド間で共有される可能性がある匿名クラスまたはネストしたクラスで使用されるインスタンスを報告します。

ThreadLocalRandom は通常、ThreadLocalRandom.current().nextInt(...) (または nextDouble(...) など) のように使用されます。 すべての使用箇所がこの形式である場合、ThreadLocalRandom インスタンスが複数のスレッドによって誤って使用されることはありません。

例:


    class Main {
      void printRandomNumbersAsync() {
        ThreadLocalRandom random = ThreadLocalRandom.current();
        CompletableFuture.supplyAsync(() -> generateNumbers(random))
          .thenAccept(numbers -> System.out.println(Arrays.toString(numbers)));
      }

      private int[] generateNumbers(Random random) {
        return random.ints(1000, 0, 100).toArray();
      }
    }
  

引数として ThreadLocalRandom インスタンスに安全に渡されているメソッドをリスト表示するには、オプションを使用します。 メソッド名には正規表現を使用できます。