1. 程式人生 > >java面試:多執行緒與併發

java面試:多執行緒與併發

關鍵詞

多執行緒,併發,執行緒池

多執行緒

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有沒有了解過

未完待續