大家好!儘管我已經找到了 Java 方面的工作,但我還是決定繼續 Javarash 的學習。 我為自己寫這個博客,非常懶惰,而且,有人可能會說,是在壓力下。如果有人發現它有用,我會非常高興,但您不應該將其用作尋找關卡問題答案的主要來源。
7. 你知道多少種創建線程的方法?(線程、可運行、可調用
1. 執行緒優先權是什麼?
系統中的每個執行緒都有自己的優先權。優先權是執行緒物件中從 1 到 10 的某個數字,數值越大表示優先權越高。系統首先執行較高優先權的線程,較低優先權的線程僅在其較高特權的對應線程空閒時才獲得 CPU 時間。您可以使用兩個函數來處理執行緒優先權:void setPriority(int priority) //устанавливает приоритет потока.
可能的優先權值為 MIN_PRIORITY、NORM_PRIORITY 和 MAX_PRIORITY。
int getPriority() // получает приоритет потока.
Source 如果未指定優先權,則執行緒接收優先權 5 - 中。執行緒優先權不會對其操作產生太大影響,但本質上是建議性的。如果有多個休眠執行緒需要啟動,那麼Java機器會先啟動優先權較高的執行緒。Java 機器以它認為合適的方式管理執行緒。低優先權執行緒不會空閒。他們只會比其他人獲得更少的時間,但仍然會被處決。在大多數情況下,執行緒始終以相同的優先權運行。嘗試為一個執行緒提供比其他執行緒更多的時間通常表示程式中存在體系結構錯誤。
2. 是否可以透過將執行緒的優先權降低到0來停止該執行緒?
不。會被拋出IllegalArgumentException
3. 為什麼需要ThreadGroup類別?
為了防止任何線程停止和中斷一行中的所有線程,引入了“線程組”的概念。一個執行緒只能影響與其屬於同一組的其他執行緒。ThreadGroup
是管理線程組的類別。這種方法允許您保護線程免受不必要的更改。有時您必須執行無法 100% 信任的程式碼。因此,可以方便地將其所有執行緒放在一個單獨的群組中,並防止它們幹擾主執行緒組的工作。換句話說,管理線程組
4. main-thread屬於哪一組執行緒?
main
5.什麼是ThreadPool模式
一般來說,模式ThreadPool
是解決一組問題的一組執行緒。任務被組織到隊列中。一旦執行緒完成某個任務的工作,它就會從佇列中請求下一個任務,直到佇列中的所有任務都完成為止。此後,執行緒可以終止或進入休眠狀態,直到佇列中出現新任務。
6. 為什麼需要ThreadPoolExecutor類別?
用一組線程來解決大量的小問題。使用類別可以避免機器資源的浪費。因為為每個任務創建自己的執行緒並不是很合理。Java機器為每個執行緒分配相當多的資源。換句話說,創建和銷毀已用完的執行緒可能比任務本身浪費更多的資源和時間。Java 開發人員針對這個問題想出了一個優雅的解決方案—ThreadPoolExecutor
. 這個類別裡面有兩個東西:
- 您可以將程式中出現的任務新增到其中的任務佇列。
- 線程池(線程組)-執行這些任務。
7. 你知道多少種創建線程的方法?(線程、可運行、可調用
)
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. Future 類別有什麼用?
該物件可用於查明任務是否已完成,並取得其執行結果。boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.
9. Callable 相對於 Runnable 的優點是什麼?
使用Callable
我們可以查看任務是否完成,並查看其結果,比使用容易得多Runnable
GO TO FULL VERSION