Keutamaan benang - 1

"Mari kita sambung pelajaran kita. Apakah keutamaan benang dan mengapa ia diperlukan?

"Dalam masalah dunia sebenar, kepentingan kerja yang dilakukan oleh benang yang berbeza boleh berbeza-beza. Konsep keutamaan benang dicipta untuk mengawal proses ini. Setiap benang mempunyai keutamaan yang diwakili oleh nombor dari 1 hingga 10."

"10 adalah keutamaan tertinggi."

"1 adalah yang paling rendah."

"Jika tiada keutamaan diberikan, maka seutas benang mendapat keutamaan 5 (biasa)."

Keutamaan benang tidak menjejaskan kerjanya dengan ketara, sebaliknya lebih kepada cadangan. Jika terdapat beberapa utas tidur yang perlu dijalankan, mesin Java akan memulakan utas dengan keutamaan yang lebih tinggi terlebih dahulu.

"Mesin Java menguruskan utas seperti yang difikirkannya patut. Benang dengan keutamaan rendah tidak akan dibiarkan melahu. Mereka hanya akan menerima kurang masa pelaksanaan daripada yang lain, tetapi mereka masih akan dilaksanakan."

"Dalam kebanyakan kes, utas sentiasa dilaksanakan dengan keutamaan yang sama. Percubaan untuk memberikan satu utas lebih daripada yang lain selalunya merupakan petunjuk masalah seni bina dalam program."

"Whoa. Dan saya telah pun bermimpi untuk memberikan keutamaan tertinggi kepada utas saya supaya mereka melakukannya 10 kali ganda."

"Ternyata keadaan di sini hampir untuk dimuktamadkan: benang dengan keutamaan tinggi boleh dan akan berfungsi lebih banyak, tetapi mungkin tidak-tiada jaminan."

"Katakanlah, bagaimana cara saya menukar keutamaan sesuatu benang?"

"Ia sangat mudah. ​​Kelas Thread mempunyai dua kaedah:"

Kaedah Penerangan
void setPriority(int newPriority)
Tetapkan keutamaan baru
int getPriority()
Mengembalikan keutamaan urutan semasa

"Kelas Thread juga mempunyai tiga pemalar:"

int statik akhir awam MIN_PRIORITY = 1;

awam akhir statik int NORM_PRIORITY = 5;

int statik akhir awam MAX_PRIORITY = 10;

"Biar saya teka. MIN_PRIORITY ialah keutamaan minimum, MAX_PRIORITY ialah maksimum dan NORM_PRIORITY ialah keutamaan lalai?"

"Ya, betul-betul. Anda boleh menulis kod yang memberikan keutamaan urutan tertinggi."

"Adakah ada muslihat di sini? Sesuatu seperti ini?"

Thread thread = new MyThread();
thread.setPriority(Thread. MAX_PRIORITY)
thread.start();

"Betul. Tak ada yang rumit, kan?"

"Ya. Bolehkah anda menetapkan/menukar keutamaan selepas utas bermula? Atau adakah ia seperti setDaemon, di mana anda perlu menetapkan nilai sebelum utas dimulakan?"

"Keutamaan boleh ditukar selepas urutan dimulakan. Seperti yang saya telah katakan, ini tidak menyebabkan sebarang perubahan dramatik."

"Nah, itu topik yang kecil tetapi menarik. Terima kasih, Ellie."