1、每個執行緒都會建立自己的棧空間,執行自己的run方法。
2、執行緒同步
執行緒安全問題都是由全域性變數及靜態變數引起的。若每個執行緒對全域性變數、靜態變數只有讀操作,而無寫操作,那麼這個全域性變數是執行緒安全的。若多個執行緒同時執行寫操作,一般需要考慮執行緒同步,否則影響執行緒安全。
資料同步的三個方法:
①同步**塊
格式:鎖的物件可以是任意型別,多個執行緒物件要使用同一把鎖。
object lock=new object();
synchronized(lock)
②同步方法
格式:
public synchronized void method
③鎖機制(lock鎖,比同步方法和同步**塊功能更強大)
格式:
lock lock = new reentrantlock();
lock.lock();
...lock.unlock();
例子:
public static void main(string args)
private static class myrunnable implements runnable catch (exception e)
string name = thread.currentthread().getname();
system.out.println("==="+name+" "+(ticket--));}}
}*/// sellticket();
while (true) catch (exception e)
string name = thread.currentthread().getname();
system.out.println("==="+name+" "+(ticket--));
}lock.unlock();}}
private synchronized void sellticket() catch (exception e)
string name = thread.currentthread().getname();
system.out.println("==="+name+" "+(ticket--));}}
}}
3、sleep和wait
①thread.sleep(100);//不會釋放鎖資源,直到waittingtime到達後繼續執行執行緒體。
②object.wait()方法,主要用於執行緒協作的情況,他會釋放鎖資源。
注意:wait()和notify()必須由同乙個鎖物件呼叫,對應的鎖物件可以通過notify喚醒使用同乙個鎖物件呼叫的wait()方法後的執行緒。wait()和notify()必須在同步**塊或者同步函式中使用。因為必須通過鎖物件呼叫者2個方法。
當多個執行緒協作時,比如a、b執行緒,如果a執行緒在runnable(可執行)狀態中呼叫了wait()方法,那麼a執行緒就進入了waiting(無限等待)狀態,同時失去了同步鎖。假如這個時候b執行緒獲取到了同步鎖,在執行狀態中呼叫了notify()方法,那麼就會將無限等待的a執行緒喚醒,如果a獲得鎖物件,那麼a執行緒就會進入runnable狀態,如果沒有獲得鎖物件,那麼就進入到blocked(鎖阻塞狀態)。
例如:
private static object obj = new object();
private static thread thread1 = new thread() catch (interruptedexception e)
string name = thread.currentthread().getname();
system.out.println("===" + name);}}
}};private static thread thread2 = new thread() catch (exception e) }}
}};
c 執行緒庫基本原理
思路 1 初始化執行緒 2 執行緒上鎖 然後解除鎖的占用 等待訊號通知 3 某個執行緒被通知到後 獲取鎖 鎖獲取後取任務隊裡第乙個任務函式 解除鎖 執行任務 繼續第二步操作 關鍵點 訊號通知函式 notify one 只會通知等待區中的乙個,讓其來獲取鎖,避免驚群事件。該執行緒池只支援空值返回的任意...
mysql的基本原理 Mysql 基本原理
mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...
8 2 1 基本原理
乙個舞台動畫物件在包含許多舞台資訊 出現在何處,佔多大面積,處在什麼角度,是否可見 這些資訊分別儲存在動畫物件的屬性中。在 中讀取這些屬性可以了解物件的位置 大小 角度等狀態資訊 修改這些屬性可以改變物件的位置 大小 角度等狀態。如果從資料的角度去理解,動畫就是在固定時間間隔點不斷修改動畫物件某項屬...