1、HashSet和TreeSet的區別
- 實現方式
HashSet:HashSet是哈希表實現的。
TreeSet:TreeSet是二差樹實現的。
- 數據是否有序
HashSet:HashSet中的數據是無序的。
TreeSet:Treeset中的數據是自動排好序的。
- 是否可以放入null值
HashSet:可以放入null,但只能放入一個null。
TreeSet:不允許放入null值。
2、死鎖例子。
public class DeadLock implements Runnable{
public static Object obj1 = new Object();
public static Object obj2 = new Object();
//標誌位
public int flag = 1;
@Override
public void run() {
if(flag==1){
synchronized (obj1){
System.out.println("flag: "+ flag + ", 鎖住了資源obj1");
try{
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println("flag: "+ flag + ", 等待獲取資源obj2");
synchronized (obj2){
System.out.println("flag:" + ", 獲得資源obj2");
}
}
}else if(flag==2){
synchronized (obj2){
System.out.println("flag: "+ flag + ", 鎖住了資源obj2");
try{
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println("flag: "+ flag + ", 等待獲取資源obj1");
synchronized (obj1){
System.out.println("flag:" + ", 獲得資源obj1");
}
}
}
}
public static void main(String[] args) {
DeadLock lock1 = new DeadLock();
DeadLock lock2 = new DeadLock();
lock1.flag=1;
lock2.flag=2;
new Thread(lock1).start();
new Thread(lock2).start();
}
}
3、HashMap和TreeMap的區別
HashMap:數組方式存儲key/value,線程非安全,允許null作爲key和value,key不可以重複,value允許重複,不保證元素迭代順序是按照插入時的順序,key的hash值是先計算key的hashcode值,然後再進行計算,每次容量擴容會重新計算所以key的hash值,會消耗資源,要求key必須重寫equals和hashcode方法
TreeMap:基於紅黑二叉樹的NavigableMap的實現,線程非安全,不允許null,key不可以重複,value允許重複,存入TreeMap的元素應當實現Comparable接口或者實現Comparator接口,會按照排序後的順序迭代元素,兩個相比較的key不得拋出classCastException。主要用於存入元素的時候對元素進行自動排序,迭代輸出的時候就按排序順序輸出
4、線程有幾種狀態?
線程通常都有五種狀態,創建、就緒、運行、阻塞和死亡。
5、異常
Exception又包含了運行時異常(RuntimeException, 又叫非檢查異常)和非運行時異常(又叫檢查異常)
- Error是程序無法處理了, 如果OutOfMemoryError、StackOverFlowError等等, 這些異常發生時, java虛擬機一般會終止線程。
- 運行時異常都是RuntimeException類及其子類,如 NullPointerException、IndexOutOfBoundsException、ClassNotFoundException、IllegalArgumentException等, 這些異常是不檢查的異常, 是在程序運行的時候可能會發生的, 所以程序可以捕捉, 也可以不捕捉. 這些錯誤一般是由程序的邏輯錯誤引起的, 程序應該從邏輯角度去儘量避免。
- 檢查異常是運行時異常以外的異常, 也是Exception及其子類, 這些異常從程序的角度來說是必須經過捕捉檢查處理的, 否則不能通過編譯. 如IOException、SQLException等。