プリミティブ型のブロックキューを使用するJavaネイティブ実装がありますか?そうでない場合は、どうすればビルドできますか?どのようにプリミティブ型のブロックキューを実装できますか?
プリミティブ型を使用しているときにボクシングとアンボックスなしでブロックキューを使用したいと思います。私は土地資産をチェックしますが、ブロックキューをサポートしていません。
プリミティブ型のブロックキューを使用するJavaネイティブ実装がありますか?そうでない場合は、どうすればビルドできますか?どのようにプリミティブ型のブロックキューを実装できますか?
プリミティブ型を使用しているときにボクシングとアンボックスなしでブロックキューを使用したいと思います。私は土地資産をチェックしますが、ブロックキューをサポートしていません。
私が知る限り、プリミティブ型のための組み込みブロックキューはありません。
これには2つのオプションであなたを残します:
はプリミティブ型を避けてください。 Integer,FloatなどのJavaのラッパーを使用してください。非常に良い場合を除き、これは私が推奨するものです参照を避ける理由(余分なメモリを恐れていますか? ?)
自分でブロッキングキューを実装します。単純な配列とSemaphoreを使用するとかなり簡単になります。 OpenJDK'sの実装をコピーして必要な変更を加えると、パフォーマンスが向上する可能性があります。 private final E[] items
をprivate final int[] items
のように変更してから、items
を参照する必要がある場合は追加の変更を加えてください。
1. OPはこのオプションを知らないと思いますか?さらに、「プリミティブ型を避ける」というのは、Javaの完全な悪い一般的なアドバイスのように聞こえます。これは、透明性、サポート性などを何も追加せず、OTOHはnullでバグの可能性を開きます。プリミティブ型を避ける唯一の実際の理由は、ライブラリからのサポートの欠如であり、これはまさにこの問題の話題です。 – leventov
2. OpenJDKのソースがCP例外付きのGPLのもとでリリースされているので、それは単純ではありません。それは、独自のコードベース全体を開く必要がないために適切に従うのは難しいです。そして、とにかくそれは多くの企業にとって初心者ではありません。 [DLのウェブサイトのバージョン](http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/concurrent/ArrayBlockingQueue.java?view=log)ではなく、パブリックドメインなので使用されます。 – leventov
@leventov 1.はい。 OPはこのオプションを知らないかもしれません。私たちのどちらも、彼が誰であるかわからない、彼は学生、初心者、または両方(サイトの訪問者の多くのように)かもしれません。それはおそらく質問によって判断されるようです。 具体的な必要性がなければ、 'Integer'sを' Int'sに置き換えるのは古典的な最適化です(特に初心者はC/C++から来ています) – Malt
プリミティブを使用すると、一般的な使用例でパフォーマンスが向上しにくくなります – Dexter
重複しません。 – leventov