Kelas Thread berisi metode start () dan run (). Bab ini akan menjawab ini. Isi bab ini meliputi:
Deskripsi Perbedaan Antara Start () dan Run ()
Contoh perbedaan antara start () dan run ()
Kode sumber yang terkait dengan start () dan run () (berdasarkan JDK1.7.0_40)
Deskripsi Perbedaan Antara Start () dan Run ()
start (): fungsinya adalah untuk memulai utas baru, dan utas baru akan menjalankan metode run () yang sesuai. start () tidak dapat dipanggil berulang kali.
run (): run () dapat disebut berulang kali seperti metode anggota biasa. Jika Anda menelepon run () secara terpisah, run () akan dieksekusi di utas saat ini, dan utas baru tidak akan dimulai!
Berikut ini adalah kode untuk dijelaskan.
Salinan kode adalah sebagai berikut:
kelas mythread memperluas utas {
public void run () {
...
}
};
Mythread mythread = mythread baru ();
myThread.start () memulai utas baru dan menjalankan metode run () di utas baru.
MyThread.run () akan menjalankan metode run () langsung di utas saat ini, dan tidak akan memulai utas baru untuk menjalankan run ().
Contoh perbedaan antara start () dan run ()
Di bawah ini, tunjukkan perbedaan di antara mereka dengan contoh sederhana. Kode sumber adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
void start publik yang disinkronkan () {
// Jika utasnya tidak "siap", pengecualian dilemparkan!
if (threadstatus! = 0)
Lempar IllegalThreadStateException () baru;
// tambahkan utas ke threadgroup
group.add (ini);
Boolean dimulai = false;
mencoba {
// Mulai utas melalui start0 ()
start0 ();
// Atur tag yang dimulai
dimulai = true;
} Akhirnya {
mencoba {
if (! mulai) {
group.threadstartfailed (ini);
}
} catch (throwable abaikan) {
}
}
}
Hasil Menjalankan:
Salinan kode adalah sebagai berikut:
panggilan utama mythread.run ()
Main sedang berjalan
panggilan utama mythread.start ()
Mythread sedang berjalan
Deskripsi Hasil:
(01) thread.currentThread (). GetName () adalah nama yang digunakan untuk mendapatkan "utas saat ini". Utas saat ini mengacu pada utas yang dijadwalkan untuk dieksekusi di CPU.
(02) mythread.run () disebut dalam "utas utama utama", dan metode run () berjalan langsung pada "utas utama utama".
(03) MyThread.Start () akan memulai "Thread MyThread".
Kode sumber yang terkait dengan start () dan run () (berdasarkan JDK1.7.0_40)
Kode sumber metode start () di thread.java adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
void start publik yang disinkronkan () {
// Jika utasnya tidak "siap", pengecualian dilemparkan!
if (threadstatus! = 0)
Lempar IllegalThreadStateException () baru;
// tambahkan utas ke threadgroup
group.add (ini);
Boolean dimulai = false;
mencoba {
// Mulai utas melalui start0 ()
start0 ();
// Atur tag yang dimulai
dimulai = true;
} Akhirnya {
mencoba {
if (! mulai) {
group.threadstartfailed (ini);
}
} catch (throwable abaikan) {
}
}
}
Catatan: start () sebenarnya memulai utas melalui metode lokal start0 (). start0 () akan menjalankan utas baru, dan utas baru akan memanggil metode run ().
Salinan kode adalah sebagai berikut:
Private Native Void Start0 ();
Kode run () di thread.java adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
public void run () {
if (target! = null) {
target.run ();
}
}
Deskripsi: Target adalah objek yang dapat dijalankan. run () adalah secara langsung memanggil metode run () dari anggota runnable utas utas, dan tidak akan membuat utas baru.