1. 程式人生 > >java線程面試題摘要

java線程面試題摘要

outline run container 減少 區別 可能 cal java 本質

5.1 什麽是線程

一個程序可以執行多個任務,每一個任務成為線程;

5.2 線程和進程有什麽區別

本質的區別是, 每個進程擁有自己的一整套變量,而線程則共享數據;

5.3 如何在 Java 中使用新線程

調用 Thread.start 方法, 這個方法將創建一個執行run方法的 新線程;

5.4 start() 和 run() 有什麽區別

run()方法:在本線程內調用該Runnable對象的run()方法,可以重復多次調用;
start()方法:啟動一個線程,調用該Runnable對象的run()方法,不能多次啟動一個線程;

5.5 Thread.join 方法有什麽用

join()方法,等待其他線程終止。在當前線程中調用另一個線程的join()方法,則當前線程轉入阻塞狀態,

直到另一個進程運行結束,當前線程再由阻塞轉為就緒狀態。

5.6 假如新建T1、T2、T3三個線程,如何保證它們按順序執行?

用join()方法把T1、T2、T3合並成一個線程,就可以按照順序執行了。

5.7 volatile 變量是做什麽的

volatile關鍵字為域變量的訪問提供了一種免鎖機制,

使用volatile修飾域相當於告訴虛擬機該域可能會被其他線程更新,

因此每次使用該域就要重新計算,而不是使用寄存器中的值

5.8 如果一個線程中發生了異常會怎麽樣

可以定義這個線程異常捕獲的處理器。

如果異常沒有被捕獲該線程將會停止執行。

5.9 什麽是 ThreadLocal 變量

ThreadLocal是Java裏一種特殊的變量。每個線程都有一個ThreadLocal就是每個線程都擁有了自己獨立的一個變量,競爭條件被徹底消除了。

如果為每個線程提供一個自己獨有的變量拷貝,將大大提高效率。首先,通過復用減少了代價高昂的對象的創建個數。

其次,你在沒有使用高代價的同步或者不變性的情況下獲得了線程安全。

5.10 什麽是線程池,為什麽要使用

在程序啟動的時候就創建若幹線程來響應處理,它們被稱為線程池,裏面的線程叫工作線程。

創建線程要花費昂貴的資源和時間,如果任務來了才創建線程那麽響應時間會變長,而且一個進程能創建的線程數有限。所以我們要創建線程池來節約創建的時間。

5.11 Thread.sleep 和 wait 方法有什麽不同

wait()方法用於線程間通信,如果等待條件為真且其它線程被喚醒時它會釋放鎖。

sleep()方法僅僅釋放CPU資源或者讓當前線程停止執行一段時間,但不會釋放鎖。

5.12 synchronized 關鍵詞是做什麽的

synchronized關鍵字修飾的語句塊。

被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步。

java線程面試題摘要