死鎖是什麼
所謂死鎖: 是指兩個或兩個以上的進程在執行過程當中,因爲競爭資源或者因爲彼此通訊而形成的一種阻塞的現象,若無外力做用,它們都將沒法推動下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。html
android中使用static有什麼用
被static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的全部實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。所以,static對象能夠在它的任何對象建立以前訪問,無需引用任何對象.
用static修飾的代碼塊表示靜態代碼塊,當Java虛擬機(JVM)加載類時,就會執行該代碼塊.java
深刻理解Java中爲何內部類能夠訪問外部類的成員
內部類就是定義在一個類內部的類。定義在類內部的類有兩種狀況:一種是被static關鍵字修飾的, 叫作靜態內部類, 另外一種是不被static關鍵字修飾的, 就是普通內部類。android
- 內部類對象的建立依賴於外部類對象;
- 內部類對象持有指向外部類對象的引用。
深度緣由:web
- 編譯器自動爲內部類添加一個成員變量, 這個成員變量的類型和外部類的類型相同, 這個成員變量就是指向外部類對象的引用;
- 編譯器自動爲內部類的構造方法添加一個參數, 參數的類型是外部類的類型, 在構造方法內部使用這個參數爲1中添加的成員變量賦值;
- 在調用內部類的構造函數初始化內部類對象時, 會默認傳入外部類的引用。
進程與線程的區別
線程是指進程內的一個執行單元,也是進程內的可調度實體.設計模式
與進程的區別:
(1)地址空間:進程內的一個執行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有本身獨立的地址空間;
(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源
(3)線程是處理器調度的基本單位,但進程不是.
4)兩者都可併發執行.數組
進程和線程都是由操做系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的併發性。進程和線程的區別在於:多線程
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小於進程,使得多線程程序的併發性高。
另外,進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程序的運行效率。
線程在執行過程當中與進程仍是有區別的。每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。可是線程不可以獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。但操做系統並無將多個線程看作多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。併發
進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源.
一個線程能夠建立和撤銷另外一個線程;同一個進程中的多個線程之間能夠併發執行.異步
hashmap和hasptable的區別
第一,繼承不一樣。函數
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
第二
Hashtable 中的方法是同步的,而HashMap中的方法在缺省狀況下是非同步的。在多線程併發的環境下,能夠直接使用Hashtable,可是要使用HashMap的話就要本身增長同步處理了。
第三
Hashtable中,key和value都不容許出現null值。
在HashMap中,null能夠做爲鍵,這樣的鍵只有一個;能夠有一個或多個鍵所對應的值爲null。當get()方法返回null值時,便可以表示 HashMap中沒有該鍵,也能夠表示該鍵所對應的值爲null。所以,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。
第四,兩個遍歷方式的內部實現上不一樣。
Hashtable、HashMap都使用了 Iterator。而因爲歷史緣由,Hashtable還使用了Enumeration的方式 。
第五
哈希值的使用不一樣,HashTable直接使用對象的hashCode。而HashMap從新計算hash值。
第六
Hashtable和HashMap它們兩個內部實現方式的數組的初始大小和擴容的方式。HashTable中hash數組默認大小是11,增長的方式是 old*2+1。HashMap中hash數組的默認大小是16,並且必定是2的指數。
參考:
HashMap和Hashtable的區別
android進程間通訊哪幾個方法
Android進程間通訊
Android 之 Binder與進程間通訊
深刻分析AIDL原理
Android IPC的6種方式
Android IPC進程通訊——Messager方式
android異步加載哪幾個方法
AsyncTask、HandlerThread、Activity.runOnUIThread(Runnable)
Android圖片異步加載的方法
詳解Android中AsyncTask的使用
Android基本功:異步任務(AsyncTask)
android同步機制,synchronized
java同步機制:synchronized
Java synchronized詳解
爲何使用設計模式
爲何咱們須要學習(設計)模式
知乎設計模式討論
如何正確的使用設計模式
靜態方法中可使用非靜態的變量麼
static 關鍵字
若是想對象中的屬性能被全部對象共享,則就必須將其聲明爲static屬性,若是一個類中的方法想由類調用,則能夠聲明爲static方法
使用static聲明的屬性成爲全局屬性(也稱爲靜態屬性、類屬性)
Java中經常使用的內存區域
- 棧內存空間:保存全部的對象名稱(更準確的說是保持了引用了堆內存空間的地址)
- 堆內存空間:保存每一個對象的具體屬性內容
- 全局數據區:保存static類型的屬性
- 全局代碼區:保存全部的方法定義
使用static聲明的方法稱爲類方法
非static聲明的方法能夠去調用static聲明的屬性或方法,可是static聲明的方法是不能調用非static類型聲明的屬性或方法。static是不能調用任何非static內容的,由於在程序中全部的屬性和方法必須在對象開闢堆內存以後才能夠調用,而static類型的方法在對象未被實例化時就能夠被類名調用。