java面試:多執行緒與併發
阿新 • • 發佈:2018-12-28
關鍵詞
多執行緒,併發,執行緒池
多執行緒
Q:如何新建一個執行緒?
繼承Thread,或者實現Runnable介面,或者通過Callable介面實現
Q:執行緒池有沒有了解過?為什麼要用執行緒池?
新建執行緒的開銷太大了,使用執行緒池可以節省系統資源。
Q:執行緒池的引數有哪些?
- 引數如下:
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);
- corePoolSize:核心池的大小
- maximumPoolSize:執行緒池的最大執行緒數,它表示線上程池中最多能建立多少個執行緒;
- keepAliveTime:表示執行緒沒有任務執行時最多保持多久時間會終止。
- unit:引數keepAliveTime的時間單位
- workQueue:一個阻塞佇列,用來儲存等待執行的任務。
- handler:執行拒絕策略的物件,也就是拒絕任務處理器。
ThreadPoolExecutor.AbortPolicy: 丟棄任務並丟擲RejectedExecutionException異常。 (預設) ThreadPoolExecutor.DiscardPolicy:也是丟棄任務,但是不丟擲異常。 ThreadPoolExecutor.DiscardOldestPolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程) ThreadPoolExecutor.CallerRunsPolicy:由呼叫執行緒處理該任務
- threadFactory: 定義如何啟動一個執行緒,可以設定執行緒的名稱,並且可以確定是否是後臺執行緒等。
Q:執行緒池有哪些型別?有什麼不同?
併發
Q:執行緒安全是什麼?
Q:同步有哪些?
Q:鎖有哪些?
Q:AQS有沒有了解過
未完待續