Tutorial Java multi-threaded Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari siklus hidup A thread,Prioritas A thread,Membuat sebuah thread,Untuk membuat sebuah thread dengan menerapkan interface Runnable,Untuk membuat thread melalui warisan Thread,Thread Metode,Thread beberapa konsep utama:,Menggunakan beberapa thread,

Java multi-threaded

Java multi-threaded untuk memberikan dukungan built-in. Sebuah program multithreaded mengandung dua atau lebih porsi bisa berjalan bersamaan. Setiap bagian dari program ini disebut benang, dan setiap thread mendefinisikan jalan terpisah eksekusi.

Multithreading adalah bentuk khusus dari multi-tasking, multi-threading, tetapi menggunakan overhead sumber daya yang lebih kecil.

istilah lain didefinisikan di sini, dan benang-terkait - Proses: proses termasuk sistem operasi mengalokasikan ruang memori yang berisi satu atau lebih benang. Sebuah thread terpisah tidak bisa ada, itu harus menjadi bagian dari proses. Proses telah berjalan ke akhir dari semua non-tunggu sampai setelah akhir benang untuk menjalankan.

Multithreading dapat memenuhi programmer untuk menulis program yang efisien untuk mencapai tujuan penggunaan CPU penuh.


siklus hidup A thread

Thread melalui semua tahapan siklus hidupnya. Gambar berikut ini menunjukkan siklus hidup lengkap benang.

java_thread

  • Status baru:

    Setelah menggunakan kata kunci baru dan kelas Thread atau subclass untuk membuat objek benang, objek benang dalam keadaan baru. Masih dalam keadaan ini sampai program start () thread ini.

  • negara siap:

    Jika benda thread untuk memanggil metode start (), benang ke negara siap. benang siap dalam antrian siap, menunggu untuk JVM benang penjadwalan scheduler.

  • Status operasi:

    Jika benang mendapat status siap sumber daya CPU, Anda dapat melakukan run (), thread akan berjalan saat ini. Thread menjalankan paling kompleks, dapat menjadi negara diblokir, negara siap, dan keadaan kematian.

  • negara diblokir:

    Jika thread dijalankan setelah tidur (sleep), menangguhkan (hang) dan metode lainnya, hilangnya sumber daya yang diduduki, benang memasuki negara diblokir dari berjalan. Setelah waktu tidur telah datang untuk mendapatkan peralatan atau sumber daya untuk kembali memasuki kondisi siap.

  • Status kematian:

    Ketika thread menjalankan negara dari tugas atau kondisi terminasi lainnya terjadi, benang beralih ke keadaan akhir.


Prioritas A thread

Setiap thread Java memiliki prioritas, yang membantu menentukan sistem operasi agar penjadwalan thread.

prioritas thread Jawa adalah bilangan bulat yang berkisar dari 1 (Thread.MIN_PRIORITY) - 10 (Thread.MAX_PRIORITY).

Secara default, setiap thread diberi NORM_PRIORITY prioritas (5).

Thread dengan prioritas yang lebih tinggi adalah lebih penting untuk program ini, dan harus mengalokasikan sumber daya prosesor sebelum thread prioritas rendah. Namun, agar tidak menjamin benang prioritas thread eksekusi, dan sangat bergantung pada internet.


Membuat sebuah thread

Java menyediakan dua metode untuk membuat sebuah thread:

  • Runable dengan menerapkan antarmuka;
  • Melalui warisan kelas Thread itu sendiri.

Untuk membuat sebuah thread dengan menerapkan interface Runnable

Membuat sebuah thread, cara termudah adalah untuk menciptakan sebuah kelas yang mengimplementasikan interface Runnable.

Dalam rangka mencapai Runnable, sebuah kelas hanya perlu melakukan pemanggilan metode run (), pernyataan berikut:

public void run()

Anda dapat mengganti metode ini, penting untuk memahami run () dapat memanggil metode lain, penggunaan kelas-kelas lain, dan mendeklarasikan variabel, seperti benang utama.

Setelah membuat kelas mengimplementasikan interface Runnable, Anda dapat instantiate obyek di kelas thread.

Thread mendefinisikan beberapa konstruktor, mengikuti ini sering kita gunakan:

Thread(Runnable threadOb,String threadName);

Di sini, threadOb adalah turunan dari kelas yang mengimplementasikan interface Runnable, dan threadName menentukan nama baru dari benang.

Setelah thread baru dibuat, Anda memanggil metode start () itu akan berjalan.

void start();

contoh

Berikut adalah sebuah contoh dari itu untuk membuat sebuah thread dan mulai pelaksanaan:

// 创建一个新的线程
class NewThread implements Runnable {
   Thread t;
   NewThread() {
      // 创建第二个新线程
      t = new Thread(this, "Demo Thread");
      System.out.println("Child thread: " + t);
      t.start(); // 开始线程
   }
  
   // 第二个线程入口
   public void run() {
      try {
         for(int i = 5; i > 0; i--) {
            System.out.println("Child Thread: " + i);
            // 暂停线程
            Thread.sleep(50);
         }
     } catch (InterruptedException e) {
         System.out.println("Child interrupted.");
     }
     System.out.println("Exiting child thread.");
   }
}
 
public class ThreadDemo {
   public static void main(String args[]) {
      new NewThread(); // 创建一个新线程
      try {
         for(int i = 5; i > 0; i--) {
           System.out.println("Main Thread: " + i);
           Thread.sleep(100);
         }
      } catch (InterruptedException e) {
         System.out.println("Main thread interrupted.");
      }
      System.out.println("Main thread exiting.");
   }
}

Mengkompilasi program di atas berjalan sebagai berikut:

Child thread: Thread[Demo Thread,5,main]
Main Thread: 5
Child Thread: 5
Child Thread: 4
Main Thread: 4
Child Thread: 3
Child Thread: 2
Main Thread: 3
Child Thread: 1
Exiting child thread.
Main Thread: 2
Main Thread: 1
Main thread exiting.

Untuk membuat thread melalui warisan Thread

Cara kedua untuk membuat sebuah thread adalah untuk menciptakan sebuah kelas baru yang mewarisi kelas Thread, dan kemudian membuat sebuah instance dari kelas.

Mewarisi kelas harus mengganti metode run (), yang merupakan entry point untuk thread baru. Hal ini juga harus memanggil metode start () untuk mengeksekusi.

contoh

// 通过继承 Thread 创建线程
class NewThread extends Thread {
   NewThread() {
      // 创建第二个新线程
      super("Demo Thread");
      System.out.println("Child thread: " + this);
      start(); // 开始线程
   }
 
   // 第二个线程入口
   public void run() {
      try {
         for(int i = 5; i > 0; i--) {
            System.out.println("Child Thread: " + i);
                            // 让线程休眠一会
            Thread.sleep(50);
         }
      } catch (InterruptedException e) {
         System.out.println("Child interrupted.");
      }
      System.out.println("Exiting child thread.");
   }
}
 
public class ExtendThread {
   public static void main(String args[]) {
      new NewThread(); // 创建一个新线程
      try {
         for(int i = 5; i > 0; i--) {
            System.out.println("Main Thread: " + i);
            Thread.sleep(100);
         }
      } catch (InterruptedException e) {
         System.out.println("Main thread interrupted.");
      }
      System.out.println("Main thread exiting.");
   }
}

Mengkompilasi program di atas berjalan sebagai berikut:

Child thread: Thread[Demo Thread,5,main]
Main Thread: 5
Child Thread: 5
Child Thread: 4
Main Thread: 4
Child Thread: 3
Child Thread: 2
Main Thread: 3
Child Thread: 1
Exiting child thread.
Main Thread: 2
Main Thread: 1
Main thread exiting.

Thread Metode

Tabel berikut berisi daftar kelas Thread beberapa cara penting:

Tidak. metode Deskripsi
1 public void start ()
Membuat thread ini untuk memulai eksekusi; Java Virtual Machine memanggil metode menjalankan thread ini.
2 public void run ()
Jika thread ini dibangun menggunakan terpisah objek run Runnable, kemudian memanggil metode run dari objek Runnable, jika tidak, metode ini tidak apa-apa dan kembali.
3 public void akhir setName (String nama)
Mengubah nama dari thread ini, sehingga sama nama parameter.
4 public void akhir setpriority (int prioritas)
Mengubah prioritas thread.
5 public void akhir setDaemon (boolean on)
Menandai thread ini sebagai thread daemon atau thread pengguna.
6 kekosongan akhir public bergabung (milidetik panjang)
Tunggu thread ini untuk maksimal millis milidetik.
7 public void interrupt ()
Interrupted benang.
8 publik akhir IsAlive boolean ()
Tes jika thread ini aktif.

Tes jika thread ini aktif. Metode di atas disebut objek Thread. Metode berikut adalah metode statis dari kelas Thread.

Tidak. metode Deskripsi
1 public static void hasil ()
Suspend objek benang saat ini melaksanakan, dan melakukan benang lainnya.
2 public static void tidur (milidetik panjang)
Dalam jumlah tertentu milidetik saat ini mengeksekusi thread untuk tidur (eksekusi gencatan), sistem operasi ini timer dan penjadwal oleh presisi dan akurasi.
3 public static boolean holdsLock (Object x)
Jika dan hanya jika thread saat memegang kunci monitor pada objek tertentu, ia mengembalikan benar.
4 publik Thread statis currentThread ()
Ini mengembalikan referensi ke objek benang saat ini mengeksekusi adalah.
5 public static void dumpStack ()
Saat thread jejak stack cetakan pada stream kesalahan standar.

contoh

Program berikut menunjukkan beberapa cara ThreadClassDemo kelas Thread:

// 文件名 : DisplayMessage.java
// 通过实现 Runnable 接口创建线程
public class DisplayMessage implements Runnable
{
   private String message;
   public DisplayMessage(String message)
   {
      this.message = message;
   }
   public void run()
   {
      while(true)
      {
         System.out.println(message);
      }
   }
}
// 文件名 : GuessANumber.java
// 通过继承 Thread 类创建线程

public class GuessANumber extends Thread
{
   private int number;
   public GuessANumber(int number)
   {
      this.number = number;
   }
   public void run()
   {
      int counter = 0;
      int guess = 0;
      do
      {
          guess = (int) (Math.random() * 100 + 1);
          System.out.println(this.getName()
                       + " guesses " + guess);
          counter++;
      }while(guess != number);
      System.out.println("** Correct! " + this.getName()
                       + " in " + counter + " guesses.**");
   }
}
// 文件名 : ThreadClassDemo.java
public class ThreadClassDemo
{
   public static void main(String [] args)
   {
      Runnable hello = new DisplayMessage("Hello");
      Thread thread1 = new Thread(hello);
      thread1.setDaemon(true);
      thread1.setName("hello");
      System.out.println("Starting hello threadid.");
      thread1.start();
     
      Runnable bye = new DisplayMessage("Goodbye");
      Thread thread2 = new Thread(bye);
      thread2.setPriority(Thread.MIN_PRIORITY);
      thread2.setDaemon(true);
      System.out.println("Starting goodbye threadid.");
      thread2.start();
 
      System.out.println("Starting thread3id.");
      Thread thread3 = new GuessANumber(27);
      thread3.start();
      try
      {
         thread3.join();
      }catch(InterruptedException e)
      {
         System.out.println("Thread interrupted.");
      }
      System.out.println("Starting thread4id.");
      Thread thread4 = new GuessANumber(75);
     
           thread4.start();
      System.out.println("main() is endingid.");
   }
}

Hasil adalah sebagai berikut, hasil setiap run tidak sama.

Starting hello threadid.
Starting goodbye threadid.
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Thread-2 guesses 27
Hello
** Correct! Thread-2 in 102 guesses.**
Hello
Starting thread4id.
Hello
Hello
idididididremaining result produced.

Thread beberapa konsep utama:

Ketika multithreaded pemrograman, Anda perlu memahami konsep-konsep berikut:

  • Thread Sinkronisasi
  • Komunikasi antara benang
  • Thread kebuntuan
  • Kontrol thread: Suspend, berhenti dan melanjutkan

Menggunakan beberapa thread

Kunci untuk penggunaan yang efektif dari program multi-threaded yang eksekusi bersamaan dipahami daripada eksekusi serial. Sebagai contoh: Program ini memiliki dua subsistem harus menjalankan secara bersamaan, kali ini Anda perlu untuk mengambil keuntungan dari multi-threaded.

Melalui penggunaan beberapa benang, Anda dapat menulis program yang sangat efisien. Namun, perlu diketahui bahwa jika Anda membuat terlalu banyak benang, efisiensi pelaksanaan program sebenarnya berkurang, daripada ditingkatkan.

Ingat, konteks beralih overhead juga sangat penting, jika Anda membuat terlalu banyak thread, waktu CPU menghabiskan dalam konteks saat pelaksanaan program beralih akan lebih!

Java multi-threaded
10/30