事件處理
將ColorAction作為ButtonPanel類的內部類,ColorAction就自動擁有訪問外部類的權限。
將組件變成事件監聽器,panel本身作為事件監聽器
Object source = event.getSource()返回發生事件的對象引用。
String command = event.getActionCommand()
getSystemLookAndFeelClassName()獲取系統觀感
UIManager.setLookAndFeel(String className)設置觀感
Java中實現一個接口的任何類都必須實現其中的所有方法。
Public interface WindowsListener
Public class WindowsAdapter implements WindowsListener
匿名內部類
EventObject類有一個子類AWTEvent,它是所有AWT事件類的父類。Swing組件將生成其他事件類型的事件對象;它們都直接擴展于EventObject,而不是AWTEvent。
Java使用一個線程在后臺進行垃圾回收。
Sleep()是Thread類的一個靜態方法,暫停當前線程活動。會拋出InterruptedException異常。
實現Runnable接口
public interface Runnable{
public abstract void run();
}
Thread t = new Thread(Runnable r);
當你用new操作符創建一個線程時。還沒有調用thread.start(),處于新生狀態。
t.start;
調用了thread.start()方法之后。線程就變成了Runnable狀態了。
Thread的start方法會創建一個新的線程來執行run方法,啟動這個線程,將引發調用run()方法。
Thread(Runnable target)構造一個新的線程來調用指定target的run()方法。
當interrupt方法在一個線程上被調用時,該線程的中斷狀態將被置位。
調用靜態的Thread.currentThread方法來取得當前的線程。然后調用它的isInterrupted方法。
如果一個線程被阻塞了,就無法檢查中斷狀態了。就會產生InterruptedException異常。例如sleep或者wait,這時候程序是在等待的,所以不可能去檢查currentThread().isInterrupted()是否返回true。
當sleep方法拋出一個InterruptedException異常時,它同時也會清除中斷狀態。
Thread接口:
void interrupt()
發送一個中斷請求給一個線程。中斷狀態被設為true。如果正在被sleep調用阻塞,拋出一個InterruptedException。
static boolean interrupted()
檢查當前線程是否已經被中斷了。調用這個方法會把當前的現成中斷狀態設置成false. currentThread
boolean interrupted()
檢查一個線程是否已經被終止了。
static Thread currentThread()
返回當前線程的Thread對象。
線程組
ThreadGroup g = new ThreadGroup(String groupName);
Thread t = new Thread(g, threadName);
未捕獲異常處理器
鎖對象
同步synchronized關鍵字,ReentrantLock類
Private Lock mylock = new ReentrantLock();
Mylock.lock;
Try{
...
}finally{
Mylock.unlock;
}
條件對象
Condition newCondition()返回該鎖相關的一個條件對象;
void await()將該線程放到條件的等待集;直到條件被改變時,再次激活等待線程。
void signalAll()解除該條件的等待集中所有線程的阻塞狀態。
Synchronized方法,即線程必須先獲得對象的鎖,才能調用該方法。
publicfinalnativevoid notify();
publicfinalnativevoid notifyAll();
解除在該對象上調用wait的線程的阻塞狀態。
public final native void wait(long timeout) throws InterruptedException;
導致線程進入等待狀態直到被通知。只能在同步的方法中用。