Saya baru -baru ini melihat pertanyaan dengan kode sebagai berikut:
Salinan kode adalah sebagai berikut:
public static void main (string args []) {
Utas t = utas baru () {
public void run () {
pong ();
}
};
t.run ();
System.out.println ("ping");
}
static void pong () {
System.out.println ("pong");
}
Pertanyaan, apa hasilnya akan output?
Saya menjalankannya berkali -kali, dan ternyata adalah pong ping. Kemudian, saya akhirnya menemukan titik kunci, objek utas T, yang tidak memanggil metode start (), tetapi metode run (). Kemudian, saya membuka debugging mode breakpoint dan menemukan bahwa ketika saya memanggil metode run (), hanya ada satu utas di seluruh program. Hanya dengan begitu kita dapat bersaing dengan utas utama untuk CPU, dan mungkin ada beberapa hasil, tetapi karena metode output berikut dieksekusi dengan cepat, pada dasarnya adalah output dari "ping pong".
Jadi perbedaan antara run () dan start () adalah:
run () adalah metode yang didefinisikan dalam antarmuka runnable, yaitu untuk memungkinkan pemrogram klien untuk menulis kode fungsional mereka sendiri dalam metode ini. Tidak ada perbedaan antara menelepon secara langsung dan memanggil metode anggota Anda sendiri dengan kelas biasa.
start () adalah bendera yang mulai dijalankan oleh utas.
Jadi saya pikir jika Anda ingin menulis utas terpisah, yang terbaik adalah warisan utas. .