Java - Keprihatinan Thread

Helo di sana, penyihir Java masa depan! Hari ini, kita akan menyelam ke atas dunia yang menarik tentang keprihatinan thread di Java. Buckle up, kerana kita akan untuk menyusun atas perjalanan yang akan mengubah anda dari penyemangat Java menjadi profesional keprihatinan thread!

Java - Thread Priority

Apa itu Keprihatinan Thread?

Sebelum kita melompat ke atas perincian, mari kita mulakan dengan asas. Bayangkan anda adalah seorang juru masak di atas dapur yang sibuk (itu adalah program Java kita), dan anda mempunyai banyak tugasan (thread kita) untuk diselesaikan. Ada beberapa tugasan yang lebih penting daripada yang lain, kan? Itulah persis apa yang keprihatinan thread tentang di Java - ia adalah cara untuk memberitahu Mesin Virtual Java (JVM) mana thread yang lebih penting dan harus mendapat lebih banyak perhatian.

Skala Keprihatinan

Di Java, keprihatinan thread direpresentasikan oleh nombor yang berkisar dari 1 hingga 10:

  • 1 adalah keprihatinan最低
  • 5 adalah keprihatinan normal (default)
  • 10 adalah keprihatinan tertinggi

Pikirkan tentang itu seperti senarai VIP di atas klub mewah. Semakin tinggi angka, semakin penting thread itu dianggap.

Konstanta Properti Terbawa bagi Klas Thread

Java menyediakan beberapa konstanta yang berguna untuk aras keprihatinan umum. Mari kita lihat:

Konstanta Nilai Keterangan
Thread.MIN_PRIORITY 1 Keprihatinan minimum
Thread.NORM_PRIORITY 5 Keprihatinan default
Thread.MAX_PRIORITY 10 Keprihatinan maksimum

Penggunaan konstanta ini menjadikan kod anda lebih mudah dibaca. Ia seperti menggunakan "VIP", "Reguler", dan "Ekonomi" bukannya nombor di atas senarai tetamu anda.

Metode Tetap dan Pengambil Keprihatinan Thread

Sekarang, mari kita belajar bagaimana untuk menetapkan dan mendapatkan keprihatinan thread:

Menetapkan Keprihatinan Thread

Untuk menetapkan keprihatinan thread, kita gunakan metode setPriority():

thread.setPriority(Thread.MAX_PRIORITY);

Mendapatkan Keprihatinan Thread

Untuk memeriksa keprihatinan thread semasa, kita gunakan metode getPriority():

int priority = thread.getPriority();

Contoh Keprihatinan Thread di Java

Mari kita tempatkan pengetahuan ini ke atas praktek dengan contoh yang ringkas:

public class PriorityDemo {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("Thread 1: " + i);
}
});

Thread t2 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("Thread 2: " + i);
}
});

// Set keprihatinan
t1.setPriority(Thread.MIN_PRIORITY);
t2.setPriority(Thread.MAX_PRIORITY);

// Mula thread
t1.start();
t2.start();
}
}

Dalam contoh ini, kita membuat dua thread. Thread 1 diatur ke keprihatinan minimum, sementara Thread 2 mendapat keprihatinan maksimum. Apabila kita menjalankan program ini, anda mungkin akan lihat Thread 2 menyelesaikan tugasnya sebelum Thread 1, walaupun dimulai kedua.

Ingat, walau bagaimanapun, penjadualan thread boleh dipengaruhi oleh faktor di luar hanya keprihatinan, jadi hasilnya mungkin tidak selalu betul seperti yang diharapkan. Ia seperti memberikan tiket VIP kepada rakan anda - mereka lebih berpeluang untuk mendapat masuk pertama, tetapi tidak dijamin!

Lagi Contoh Keprihatinan Thread

Mari kita eksplor contoh yang sedikit lebih kompleks untuk benar-benar menempelkan pemahaman kita:

public class PriorityExample implements Runnable {
private String threadName;

public PriorityExample(String name) {
this.threadName = name;
}

public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(threadName + " dengan keprihatinan " +
Thread.currentThread().getPriority() +
" adalah berjalan");
try {
Thread.sleep(1000); // tidur selama 1 saat
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
Thread t1 = new Thread(new PriorityExample("Thread Keprihatinan Rendah"));
Thread t2 = new Thread(new PriorityExample("Thread Keprihatinan Normal"));
Thread t3 = new Thread(new PriorityExample("Thread Keprihatinan Tinggi"));

t1.setPriority(Thread.MIN_PRIORITY);
// keprihatinan t2 adalah default, jadi kita tidak perlu untuk menetapkannya
t3.setPriority(Thread.MAX_PRIORITY);

t1.start();
t2.start();
t3.start();
}
}

Dalam contoh ini, kita membuat tiga thread dengan keprihatinan yang berbeza. Setiap thread mencetak nama dan keprihatinannya tiga kali, dengan jeda satu saat di antara setiap cetak.

Apabila anda menjalankan program ini, anda mungkin akan lihat output seperti ini:

Thread Keprihatinan Tinggi dengan keprihatinan 10 adalah berjalan
Thread Keprihatinan Normal dengan keprihatinan 5 adalah berjalan
Thread Keprihatinan Rendah dengan keprihatinan 1 adalah berjalan
Thread Keprihatinan Tinggi dengan keprihatinan 10 adalah berjalan
Thread Keprihatinan Normal dengan keprihatinan 5 adalah berjalan
Thread Keprihatinan Rendah dengan keprihatinan 1 adalah berjalan
Thread Keprihatinan Tinggi dengan keprihatinan 10 adalah berjalan
Thread Keprihatinan Normal dengan keprihatinan 5 adalah berjalan
Thread Keprihatinan Rendah dengan keprihatinan 1 adalah berjalan

Perhatikan bahwa thread dengan keprihatinan tinggi cenderung untuk berjalan dahulu, diikuti oleh thread dengan keprihatinan normal, dan kemudian thread dengan keprihatinan rendah. Walau bagaimanapun, tatacara yang betul boleh berubah kerana faktor seperti muatan sistem dan khusus tentang pelaksanaan JVM.

Kesimpulan

Dan itu adalah, rakyat! Anda baru sahaja meningkatkan skill Java anda dengan menguasai keprihatinan thread. Ingat, walaupun keprihatinan thread adalah alat yang berguna, ia bukan tongkat ajaib. JVM akhirnya memutuskan bagaimana untuk menjadualkan thread, dan keprihatinan adalah hanya satu faktor yang ia pertimbangkan.

Penggunaan keprihatinan thread adalah seperti menjadi tuan rumah pesta yang baik - anda boleh mencadangkan siapa yang harus mendapat perhatian pertama, tetapi anda tidak boleh mengawal bagaimana tetamu anda akan berinteraksi. Gunakan keprihatinan dengan bijak, dan program Java anda akan berjalan lebih halus daripada mesin yang dilapisi baik!

Terus koding, terus belajar, dan ingat - di atas dunia Java, setiap thread dihitung!

Credits: Image by storyset