Terapkan multi-threading dengan mewarisi kelas Thead:
Keuntungan: Mudah untuk ditulis. Jika Anda perlu mengakses thread saat ini, cukup gunakan ini daripada menggunakan metode Thead.currentThread().
Kekurangan: Karena kelas thread ini mewarisi kelas Thead, maka tidak dapat mewarisi kelas lain.
Contoh kode:
Copy kode kodenya sebagai berikut:
paket org.frzh.thread;
kelas publik FirstThread memperluas Thread{
pribadi ke dalam saya;
//Tulis ulang metode yang dijalankan. Badan metode dari metode yang dijalankan adalah badan eksekusi thread.
menjalankan kekosongan publik() {
untuk (; saya < 100; saya++) {
//Ketika kelas thread mewarisi kelas Thread, Anda bisa langsung memanggil metode getName untuk mendapatkan nama thread saat ini.
//Jika Anda ingin mendapatkan thread saat ini, gunakan ini secara langsung
//Metode getName pada objek Thread mengembalikan nama thread saat ini
Sistem.keluar.println(getName() + " " + i);
}
}
public static void main(String[] args) {
untuk (int saya = 0; saya < 100; saya++) {
//Panggil metode CurrentThread Thead untuk mendapatkan thread saat ini
System.out.println(Thread.currentThread().getName() + " " +i);
jika (saya == 20) {
FirstThread().start();
FirstThread().start();
}
}
}
}
Cuplikan hasil yang berjalan:
Kami menemukan bahwa nilai i di kedua sub-utas tidak kontinu, yang tampaknya tidak konsisten dengan apa yang kami katakan tentang pembagian data secara langsung oleh sub-utas. Faktanya, di sini kita membuat instance dua sub-thread, masing-masing dengan variabel instan i sendiri.
Menggunakan multi-threading yang mengimplementasikan antarmuka Runable:
Keuntungan: Kelas thread hanya mengimplementasikan antarmuka Runable, sehingga juga dapat mewarisi kelas lain;
Dalam hal ini, beberapa thread dapat berbagi objek target, sehingga sangat cocok jika beberapa thread memproses sumber daya yang sama, sehingga CPU, kode, dan data dapat dipisahkan untuk membentuk model yang jelas dan refleksi yang lebih baik .
Kekurangan: Pemrograman sedikit rumit. Jika ingin mengakses thread saat ini, Anda harus menggunakan metode Thread.currentThread.
Contoh kode:
Copy kode kodenya sebagai berikut:
paket org.frzh.thread;
kelas publik SecondThread mengimplementasikan Runnable{
pribadi ke dalam saya;
@Mengesampingkan
menjalankan kekosongan publik() {
// TODO Stub metode yang dibuat secara otomatis
untuk (; saya < 100; saya++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
untuk (int saya = 0; saya < 100; saya++) {
System.out.println(Thread.currentThread().getName() + " " + i);
jika (saya == 20) {
Benang Kedua st = Benang Kedua baru();
Thread baru(st, "utas anak 1").start();
Thread baru(st, "utas anak 2").start();
}
}
}
}
Cuplikan hasil yang berjalan:
Terlihat nilai i saat ini berubah terus menerus karena thread 1 dan 2 mempunyai target yang sama.