最近、私は Java プロジェクトを保守しており、グループ内で Java の長所と短所について話し合っています。残念ながら、Java の究極のファンの中には、パフォーマンスはもはや C++ ほど悪くはなく、多くの標準ライブラリはマスターによって書かれており、その安定性などを常に主張する人もいます。私はそれを注意深く調べただけで、彼らが私に与えた指示の 1 つは、スレッド間でメッセージを配信するには、Java でカプセル化された BlockingQueue を使用すれば十分であるということでした。
これで十分なので、テストするためのコードを作成してみましょう。単純に小さなプログラムを作成して、いくつかのテストを実行します。
インポートbase.MyRunnable;
パブリッククラステスト
{
public static void main(String[] args)
{
BlockingQueue<Integer> キュー = new LinkedBlockingQueue<Integer>();
java.lang.Runnable r = new MyRunnable(queue);
スレッド t = 新しいスレッド(r);
t.start();
その間(真)
{
試す
{
その間(真)
{
for(int i =0;i < 10000;i++)
{
キュー.オファー(i);
}
}
}
catch (例外 e)
{
e.printStackTrace();
}
}
}
}
//追加する必要があるパッケージ
パッケージベース。
java.lang.Runnableをインポートします。
インポート java.util.concurrent.*;
java.util.* をインポートします。
パブリック クラス MyRunnable は Runnable を実装します
{
public MyRunnable(BlockingQueue<Integer> キュー)
{
this.queue = キュー;
}
public void run()
{
日付 d = 新しい Date();
長い開始時間 = d.getTime();
System.err.println(starttime);
int カウント = 0;
その間(真)
{
試す
{
整数 i = this.queue.poll();
if(i != null)
{
カウント++;
}
if(カウント == 100000)
{
日付 e = 新しい日付();
長い終了時間 = e.getTime();
System.err.println(count);
System.err.println(終了時間);
System.err.print(終了時間 - 開始時間);
壊す;
}
}
catch (例外 e)
{
}
}
}
プライベート BlockingQueue<Integer> キュー;
}
上記のテスト コードでは Offer と Poll を使用しました。最初の 2 つの実装関数を見てみましょう。