Baru-baru ini saya menjalankan proyek Java, dan di grup kami mengobrol tentang pro dan kontra Java! Sayangnya, beberapa penggemar Java selalu mengklaim bahwa kinerjanya tidak lagi seburuk C++, dan banyak perpustakaan standar ditulis oleh master, seberapa stabil perpustakaan tersebut, dll. Saya hanya mempelajarinya dengan cermat, dan salah satu instruksi yang mereka berikan kepada saya adalah untuk menyampaikan pesan antar thread, cukup menggunakan BlockingQueue yang telah dienkapsulasi dalam java.
Karena sudah cukup, mari kita tulis kode untuk mengujinya. Cukup tulis sebuah program kecil dan lakukan beberapa pengujian:
impor basis.MyRunnable;
Tes kelas publik
{
public static void main(String[] args)
{
BlockingQueue<Integer> antrian = new LinkedBlockingQueue<Integer>();
java.lang.Runnable r = new MyRunnable(antrian);
Utas t = Utas baru(r);
t.mulai();
sementara (benar)
{
mencoba
{
sementara (benar)
{
untuk(ke dalam i =0;i < 10000;i++)
{
antrian.penawaran(i);
}
}
}
tangkapan (Pengecualian e)
{
e.printStackTrace();
}
}
}
}
//Paket yang perlu ditambahkan
basis paket;
import java.lang.Runnable;
import java.util.bersamaan.*;
import java.util.*;
kelas publik MyRunnable mengimplementasikan Runnable
{
publik MyRunnable (antrian BlockingQueue<Integer>)
{
this.queue = antrian;
}
menjalankan kekosongan publik()
{
Tanggal d = Tanggal baru();
waktu mulai yang lama = d.getTime();
System.err.println(waktu mulai);
int hitungan = 0;
sementara (benar)
{
mencoba
{
Integer i = this.queue.poll();
jika(saya != nol)
{
hitung++;
}
jika(hitungan == 100000)
{
Tanggal e = Tanggal baru();
waktu berakhir yang panjang = e.getTime();
System.err.println(hitungan);
System.err.println(waktu berakhir);
System.err.print(waktu berakhir - waktu mulai);
merusak;
}
}
tangkapan (Pengecualian e)
{
}
}
}
antrian BlockingQueue<Integer> pribadi;
}
Saya menggunakan offer dan polling pada kode pengujian di atas. Mari kita lihat dua fungsi implementasi ini