2

私は見ていたArrayBlockingQueue

コンストラクターで渡すことができるオプションについて、fair公正であるとは実際にはどういう意味ですか?

fair - true の場合、挿入または削除時にブロックされたスレッドのキュー アクセスは FIFO 順で処理されます。false の場合、アクセス順序は指定されていません。

私が理解していることから、公正はFIFOを意味しますか?私が必要としていたものではありませんか?例えば。1 つのスレッドがキューにアクセスし続けるべきではありませんか?

4

3 に答える 3

2

FAIRは、実装が1つを選択できるように、公平なスケジューリングポリシーを実装することです。不運なスレッドが無期限に遅延する可能性を回避するため、公平なスケジューリングはより良い代替案のように聞こえますが、実際には、キューの操作に大きなオーバーヘッドが発生することを正当化するのに十分なほど重要なメリットはほとんどありません。公平なスケジューリングが指定されていない場合、ArrayBlockingQueueは通常、公平な操作を概算しますが、保証はありません。

コードによる参照

于 2013-02-26T09:33:35.570 に答える
2

Fair は、保証された FIFO アクセスを意味します。Java 7 は、ロックが既に取得されているときに、キューにアクセスしようとするスレッドに対して文字通りキューを作成します。

アレイ ブロッキング キューの使用率が高いシステムでは、フェア キューはアンフェア キューよりも大幅に遅くなります。これは、スレッド順序付けのためのキューのメンテナンスが原因です。すべてのスレッドがほぼ同じ速度で進行することがそれほど重要でない場合は、おそらくキューを不公平にしておく価値があります。

于 2013-02-26T09:32:53.950 に答える
0

問題に応じて、何が公平かを定義できます。フェアは、スレッドがリソースにアクセスできるタイムスロットであると言えます。または、フェアを先着順でリソースにアクセスするスレッドとして定義できます。

FIFOは、リソースへのアクセスの順序で公平です。

于 2013-02-26T09:37:54.430 に答える