Dalam contoh di atas, metode join kelas Thread digunakan berkali-kali. Saya rasa Anda mungkin sudah menebak apa fungsi dari metode join. Ya, fungsi metode join adalah mengubah thread eksekusi asinkron menjadi eksekusi sinkron. Artinya, ketika metode awal dari instance thread dipanggil, metode ini akan segera kembali. Jika Anda perlu menggunakan nilai yang dihitung oleh thread ini setelah memanggil metode awal, Anda harus menggunakan metode join. Jika Anda tidak menggunakan metode join, tidak ada jaminan bahwa ketika pernyataan yang mengikuti metode start dijalankan, thread akan dieksekusi. Setelah menggunakan metode join, program tidak akan melanjutkan eksekusi hingga thread ini keluar. Kode berikut menunjukkan penggunaan join.
Copy kode kodenya sebagai berikut:
paket mitos;
JoinThread kelas publik memperluas Thread
{
int statis publik n = 0;
kekosongan tersinkronisasi statis inc()
{
n++;
}
menjalankan kekosongan publik()
{
untuk (int saya = 0; saya < 10; saya++)
mencoba
{
inc();
sleep(3); // Untuk membuat hasil lari lebih acak, tunda 3 milidetik
}
tangkapan (Pengecualian e)
{
}
}
public static void main(String[] args) memunculkan Pengecualian
{
Utas utas[] = Utas baru[100];
for (int i = 0; i < thread.length; i++) // Buat 100 thread
thread[i] = new JoinThread();
for (int i = 0; i < thread.length; i++) // Jalankan 100 thread yang baru saja dibuat
benang[i].mulai();
if (panjang argumen > 0)
for (int i = 0; i < thread.length; i++) // Lanjutkan setelah 100 thread dieksekusi
utas[i].join();
Sistem.keluar.println("n=" + JoinThread.n);
}
}
Dalam rutinitas 2-8, 100 thread dibuat, dan setiap thread meningkatkan variabel statis n sebesar 10. Jika n dihasilkan setelah 100 thread dieksekusi, nilai n harusnya 1000.
1. Tes 1
Gunakan perintah berikut untuk menjalankan program di atas:
Copy kode kodenya sebagai berikut:
java mitosread.JoinThread
Hasil dari menjalankan program adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
n=442
Hasil yang berjalan ini mungkin memiliki beberapa perbedaan dalam lingkungan berjalan yang berbeda, tetapi secara umum n tidak akan sama dengan 1000. Dari hasil di atas, kita dapat yakin bahwa n adalah output sebelum 100 thread dieksekusi.
2. Tes 2
Jalankan kode di atas menggunakan perintah berikut:
Ada parameter join di baris perintah di atas. Faktanya, parameter apa pun dapat digunakan di baris perintah, selama ada satu parameter. Gabung digunakan di sini hanya untuk menunjukkan bahwa metode join digunakan untuk menyinkronkan eksekusi 100 thread ini.
Hasil dari menjalankan program adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
n=1000
Apa pun lingkungan operasi Anda menjalankan perintah di atas, Anda akan mendapatkan hasil yang sama: n=1000. Ini sepenuhnya menunjukkan bahwa semua 100 thread harus dieksekusi, oleh karena itu, n harus sama dengan 1000.