Halo kabeh! Aku mutusaké kanggo nerusake sinau ing Javarash, sanajan aku wis nemokake proyek ing Jawa. Aku nulis blog iki kanggo aku, banget lazily, lan, siji bisa ngomong, ing tekanan. Aku bakal seneng banget yen wong nemokake iku migunani, nanging sampeyan ora kudu nggunakake minangka sumber utama kanggo nemokake jawaban kanggo pitakonan tingkat.
7. Carane akeh cara kanggo nggawe thread ngerti? (Thread, Runnable, Callable
1. Apa prioritas utami?
Saben thread ing sistem duwe prioritas dhewe. Prioritas minangka sawetara nomer ing obyek utas saka 1 nganti 10, kanthi nilai sing luwih dhuwur nuduhake prioritas sing luwih dhuwur. Sistem nglakokake utas prioritas sing luwih dhuwur dhisik, lan utas prioritas sing luwih murah nampa wektu CPU mung nalika mitra sing luwih ndarbeni hak istimewa ora aktif. Sampeyan bisa nggarap prioritas utas nggunakake rong fungsi:void setPriority(int priority) //устанавливает приоритет потока.
Nilai prioritas sing bisa ditindakake yaiku MIN_PRIORITY, NORM_PRIORITY lan MAX_PRIORITY.
int getPriority() // получает приоритет потока.
Sumber Yen prioritas ora ditemtokake, banjur thread nampa prioritas 5 - medium. Prioritas utas ora mengaruhi operasine, nanging sifate menehi saran. Yen ana sawetara thread turu sing kudu diwiwiti, mesin Java bakal miwiti thread kanthi prioritas sing luwih dhuwur. Mesin Java ngatur benang sing cocog. Utas prioritas kurang ora bakal nganggur. Padha mung bakal nampa wektu kurang saka liyane, nanging isih bakal kaleksanan. Ing sawetara kasus, utas tansah mbukak ing prioritas padha. Nyoba menehi siji thread luwih wektu tinimbang liyane asring nuduhake kesalahan arsitektur ing program.
2. Apa bisa kanggo mungkasi thread kanthi ngurangi prioritas kanggo 0?
Ora. Bakal dibuwangIllegalArgumentException
3. Kenapa kelas ThreadGroup dibutuhake?
Kanggo nyegah Utas saka mandeg lan interrupting kabeh Utas ing baris, konsep "klompok Utas" ngenalaken. Utas mung bisa mengaruhi utas liyane sing ana ing grup sing padha.ThreadGroup
yaiku kelas sing ngatur klompok utas. Pendekatan iki ngidini sampeyan nglindhungi thread saka owah-owahan sing ora dikarepake. Kadhangkala sampeyan kudu mbukak kode sing ora bisa dipercaya 100%. Mulane, luwih trep kanggo nyelehake kabeh benang ing klompok sing kapisah lan nyegah supaya ora ngganggu karya kelompok utas utama. Ing tembung liyane, kanggo ngatur klompok Utas
4. Utas utama kalebu klompok apa?
main
5. Apa pola ThreadPool
Ing istilah umum, polaThreadPool
minangka klompok utas sing ngrampungake klompok masalah. Tugas diatur dadi antrian. Sawise utas rampung nggarap tugas, dheweke njaluk tugas sabanjure saka antrian nganti kabeh tugas ing antrian wis rampung. Sawise iki, utas bisa mungkasi utawa turu nganti tugas anyar katon ing antrian.
6. Napa kita kudu kelas ThreadPoolExecutor?
Kanggo ngatasi akeh masalah cilik karo klompok benang. Nggunakake kelas supaya nggunakake boros sumber daya mesin. Amarga nggawe thread dhewe kanggo saben tugas ora rasional banget. Mesin Java nyedhiyakake cukup akeh sumber daya kanggo saben thread. Ing tembung liyane, nggawe lan ngancurake thread sing dibuwang bisa mbuwang sumber daya lan wektu luwih akeh tinimbang tugas kasebut. Pangembang Jawa wis teka karo solusi elegan kanggo masalah iki -ThreadPoolExecutor
. Iki minangka kelas sing ana rong perkara ing njero:
- Antrian tugas sing bisa ditambahake tugas nalika katon ing program.
- Pool of threads (klompok utas) - sing nindakake tugas kasebut.
7. Carane akeh cara kanggo nggawe thread ngerti? (Thread, Runnable, Callable
)
public class ThreadsTests {
//Способ 1
static class ThreadExampleRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
//Способ 2
static class ThreadExampleFromThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
//Способ 3
static class ThreadExampleFromCallable implements Callable{
@Override
public String call() throws Exception {
return Thread.currentThread().getName();
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
new Thread(new ThreadExampleRunnable()).start(); //Способ 1
new ThreadExampleFromThread().start(); //Способ 2
//Способ 3
ExecutorService service = Executors.newFixedThreadPool(5);
Future task = service.submit(new ThreadExampleFromCallable());
System.out.println(task.get());
}
}
8. Apa kelas Future digunakake kanggo?
Objek iki bisa digunakake kanggo ngerteni apa tugas wis rampung, lan uga kanggo entuk asil eksekusi.boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.
9. Apa kaluwihan Callable saka Runnable?
NggunakakeCallable
kita bisa mangerteni apa tugas wis rampung, lan nemokake asil, luwih gampang saka nggunakakeRunnable
GO TO FULL VERSION