Rumah  >  Artikel  >  Java  >  Mengapakah `Thread.start()` penting untuk multithreading sebenar dalam Java?

Mengapakah `Thread.start()` penting untuk multithreading sebenar dalam Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 09:15:17270semak imbas

Why is `Thread.start()` essential for true multithreading in Java?

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():

  • Memulakan urutan baharu dan melaksanakan kaedah run() dalam urutan pelaksanaan yang berasingan.
  • Memperuntukkan sumber sistem dan menyediakan persekitaran pelaksanaan utas.
  • Kawalan dipindahkan kepada JVM untuk mengurus penjadualan dan pelaksanaan urutan.

Thread.run():

  • Secara langsung menggunakan kaedah run() dalam urutan semasa.
  • Tidak mencipta urutan baharu; sebaliknya, ia melaksanakan kod dalam urutan pelaksanaan semasa.
  • Tiada sumber sistem diperuntukkan untuk pengurusan utas.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn