1.定義
Object類是Java中所有類的根,是所有類的超類。所有的類對象,包括Java數(shù)組(數(shù)組也是引用),都實現(xiàn)Object類的方法。
2.API解析
public final native Class<?> getClass()
返回這個對象運行時的類對象,該類對象是被代表的類的static synchronized方法鎖定的對象。
public native int hashCode()
返回對象的哈希碼。
public boolean equals(Object obj) {
return (this == obj);
}
比較兩個對象是否相等。
protected native Object clone() throws CloneNotSupportedException
創(chuàng)建并返回該對象的一個拷貝(Shallow-Copy)。這個“拷貝”的精確含義取決于該對象的類。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
返回對象的字符串表示形式。建議所有的子類都要重寫Object類的toString()方法。
public final native void notify();
喚醒正在此對象監(jiān)視器(monitor)上等待的單個線程。如果有任何線程在此對象上等待,則選擇其中一個喚醒,選擇是任意的,并且可以根據(jù)實現(xiàn)情況進行選擇。
在當前線程放棄對象鎖(monitor)之前,喚醒的線程將無法運行。喚醒的線程將以通常的方式與其他在此對象上進行同步操作的線程競爭該對象的鎖,以獲取同步資源。
notify方法只能由擁有對象監(jiān)視器(monitor)的線程調(diào)用,否則將拋出IllegalMonitorStateException異常。
一個線程成為對象監(jiān)視器(monitor)的所有者有三種方式:
(1).通過執(zhí)行該對象的同步(synchronized method)實例方法
eg:synchronized修飾普通同步方法。此時鎖的是當前實例的對象。
public synchronized void synMethod(){
//do something
}
(2).通過執(zhí)行在對象上同步(synchronized(object))的語句的主體
eg:synchronized修飾同步代碼塊。此時鎖的是括號內(nèi)的對象。
public void synMethod() {
synchronized (this){
//do something
}
}
(3).對于類型為Class的對象,執(zhí)行該類的靜態(tài)同步(static synchronized)方法
eg:synchronized修飾靜態(tài)同步方法。此時鎖的是類的class對象。
public static synchronized void synMethod(){
//do something
}
public final native void notifyAll();
喚醒正在此對象監(jiān)視器(monitor)上等待的所有線程。
public final native void wait(long timeout) throws InterruptedException;
使當前線程等待,直到另一個線程為此對象調(diào)用notify或notifyAll方法或等待超過指定的超時時間。
當前線程必須擁有對象監(jiān)視器(monitor)或?qū)ο箧i。
wait方法使當前線程T將自身置于該監(jiān)控對象的等待集中,然后放棄對該對象的所有同步聲明。
出于線程調(diào)度的目的,線程T被禁用且處于休眠狀態(tài),直到發(fā)生四件事情之一:
(1).其他一些線程為此對象調(diào)用notify方法,并且恰好選擇線程T作為要喚醒的線程;
(2).其他一些線程為此對象調(diào)用notifyAll方法;
(3).其他一些線程中斷(Thread.interrupt())線程T;
(4).timeout超時時間過期。
注:如果當前線程在等待之前或者等待時被任何線程中斷Thread.interrupt(),則拋出InterruptedException異常。
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos > 0) {
timeout++;
}
wait(timeout);
}
使當前線程等待,直到另一個線程為此對象調(diào)用notify或notifyAll方法或等待超過指定的超時時間。
public final void wait() throws InterruptedException {
wait(0);
}
使當前線程等待,直到另一個線程為此對象調(diào)用notify或notifyAll方法。
protected void finalize() throws Throwable { }
當垃圾回收器確定不再有該對象的引用時,由垃圾回收器在對象上調(diào)用finalize方法回收對象。
原創(chuàng)不易,如需轉(zhuǎn)載,請注明出處@author Davince!