Memahami Perbezaan antara Thread.start() dan Thread.run()
Apabila bekerja dengan multithreading di Java, pengaturcara menghadapi dua kunci kaedah: Thread.start() dan Thread.run(). Walaupun nama mereka mungkin mencadangkan kefungsian yang serupa, mereka mempunyai tujuan yang berbeza.
Apakah Yang Dilakukan oleh Kaedah Ini?
Thread.start():
Thread.run():
Mengapa Kita Tidak Boleh Memanggil Thread.run sahaja ()?
Jika Thread.run() juga melaksanakan kaedah run(), mengapa kita tidak boleh memanggil ini dan bukannya Thread.start()? Sebabnya terletak pada pengasingan dan pelaksanaan bebas yang disediakan oleh multithreading.
Memanggil Thread.run() melaksanakan kod dalam utas semasa, bukan dalam utas berasingan. Ini bermakna mana-mana kod dalam kaedah run() masih berinteraksi dengan dan mempengaruhi sumber dalam urutan semasa. Ini bukan tujuan berbilang benang, yang membolehkan pelaksanaan tugasan serentak.
Contoh Menggambarkan Perbezaan:
Pertimbangkan kod berikut:
public class ThreadExample { public static void main(String[] args) { Thread t1 = new Thread(() -> System.out.println("Thread 1")); Thread t2 = new Thread(() -> System.out.println("Thread 2")); // Here, we call Thread.start() and Thread.run(): t1.start(); // Starts Thread 1 in a separate thread t2.run(); // Executes Thread 2 in the current thread System.out.println("Main Thread"); } }
Output:
Thread 1 Main Thread
Memanggil Thread.start() pada t1 mencipta utas baharu dan melaksanakan kaedah run() dalam utas itu, membenarkannya mencetak "Thread 1." Sebaliknya, memanggil Thread.run() pada t2 melaksanakan kaedah run() dalam utas semasa (iaitu, utama), memintas penciptaan utas baharu. Ini mengakibatkan "Benang 2" tidak dicetak, kerana ia tidak pernah dilaksanakan dalam urutan yang berasingan.
Atas ialah kandungan terperinci Mengapakah `Thread.start()` penting untuk multithreading sebenar dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!