Kajian mendalam tentang beberapa keadaan rangkaian Java dan kesannya terhadap pelaksanaan program
Di Java, utas ialah unit pelaksanaan ringan yang boleh berjalan secara bebas dalam program dan melaksanakan tugas tertentu. Status benang menerangkan peringkat pelaksanaan benang yang berbeza Memahami status utas adalah sangat penting untuk menulis program berbilang benang dan mengoptimumkan prestasi program. Artikel ini akan menyelidiki beberapa keadaan benang Java dan kesannya terhadap pelaksanaan program, dan memberikan contoh kod khusus.
Beberapa keadaan rangkaian Java termasuk: BARU (baharu), RUNNABLE (boleh dijalankan), DISEKAT (disekat), MENUNGGU (menunggu), MASA_MENUNGGU (menunggu bermasa) dan DITAMATKAN (ditamatkan).
Thread thread = new Thread(() -> { System.out.println("Hello, World!"); });
Thread thread = new Thread(() -> { System.out.println("Hello, World!"); }); thread.start();
public class MyRunnable implements Runnable { private Object lock = new Object(); public void run() { synchronized(lock) { System.out.println("In synchronized block"); // 一些代码 } } public static void main(String[] args) { MyRunnable runnable = new MyRunnable(); Thread thread1 = new Thread(runnable); Thread thread2 = new Thread(runnable); thread1.start(); thread2.start(); } }
Dalam kod di atas, dua utas cuba memasuki blok yang disegerakkan pada masa yang sama, kerana kunci dikongsi, benang kedua akan memasuki penyekatan nyatakan sehingga Benang pertama menyelesaikan pelaksanaan dan melepaskan kunci.
public class MyThread extends Thread { public void run() { synchronized(this) { System.out.println("Waiting for next thread..."); try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread resumed."); } } public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized(thread) { thread.notify(); } } }
Dalam kod di atas, selepas utas memasuki keadaan menunggu, utas utama membangunkan utas melalui kaedah notify().
public class MyThread extends Thread { public void run() { try { System.out.println("Thread sleeping..."); Thread.sleep(2000); System.out.println("Thread woke up."); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } }
Dalam kod di atas, utas memasuki keadaan menunggu yang dijadualkan dengan memanggil kaedah sleep() dan menunggu selama 2 saat sebelum dikejutkan.
Ringkasnya, status utas mempunyai kesan penting terhadap pelaksanaan program. Memahami pelbagai negeri dan maksudnya adalah penting untuk menulis program berbilang benang yang cekap.
Bahan rujukan:
Atas ialah kandungan terperinci Kajian mendalam tentang beberapa keadaan benang Java dan kesannya terhadap pelaksanaan program. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!