首先要了解三個定義:
程式(program):
計算機指令的集合,它以檔案的形式儲存在磁碟上。
程序(process):
乙個程式在其自身的位址空間中的一次執行活動。
資源申請、排程和獨立執行的單位,因此,它使用系統中的執行資源;而程式不能申請系統資源,不能被系統排程,也不能作為獨立執行的單位,因此,它不占用系統的執行資源。
執行緒(thread):
是程序中的乙個單一的連續控制流程。乙個程序可以擁有多個執行緒。
執行緒又稱為輕量級程序,它和程序一樣擁有獨立的執行控制,由作業系統負責排程,區別在於執行緒沒有獨立的儲存空間,而是和所屬程序中的其他執行緒共享乙個儲存空間,這使得執行緒間的通訊遠較程序簡單
看了以前某個帶我的老師發布的乙個ppt 對於多執行緒主要說了這麼一句話:
多執行緒**難在如何以正確的方式處理3點:
1.保持執行緒的"原子性"
2.避免死鎖
3.避免造成執行時的不確定性
這三點很容易理解。所以在多執行緒程式設計的時候就把這三點當做程式設計時候的原則來寫**,然後來討論一下多執行緒編寫的時候我遇到的問題吧。
1、執行緒1中有乙個指令a,執行緒2中有乙個指令b,a既可能先於b執行,也可能晚於b執行,這個順序不確定。(更具欺騙性的是:一段**可能大多數時候能一致的執行,但偶爾會出現錯亂,這正是多執行緒程式設計的關鍵問題。)
這個問題我遇到過,因為我以前沒有做過多執行緒的程式,然後寫著執行起來發現有些**執行順序偶爾會出現不對。
然後 主要看了網上的關於多執行緒的一些例項,執行緒主要就是幾個方法和屬性:
start()
導致作業系統將當前例項的狀態更改為
threadstate.running
abort()
在呼叫此方法的執行緒上引發 threadabortexception,以開始終止此執行緒的過程。 呼叫此方法通常會終止執行緒。
join()
在繼續執行標準的 com 和 sendmessage 訊息幫浦處理期間,阻塞呼叫執行緒,直到某個執行緒終止為止。
priority
獲取或設定乙個值,該值指示執行緒的排程優先順序
threadstate
獲取乙個值,該值包含當前執行緒的狀態。
suspend
已過時。掛起執行緒,或者如果執行緒已掛起,則不起作用。
resume
已過時。繼續已掛起的執行緒。
interrupt
中斷處於 waitsleepjoin狀態的縣城
然後在網上找了幾個例子有些自己 稍微修改了一下 可以參考下
第乙個首先銀行存錢取錢的時候 用卡 和 存摺 多執行緒操作
publicclass
brankaccount
取走 元
", thread.currentthread.name, num, j * datetime.now.second * 479
); console.writeline(str);
num--;}}
}}
}
然後另乙個就是死鎖的例子
object locker2 = newobject
();
public
void
mainthread()
}}).start();
lock (locker2) //
獲取鎖locker2
}}
還有乙個是關於join的例項
publicclass
mother
}public
class
son
console.writeline(
"兒子買公尺回家了~!");}}
可以嘗試把tr.join()去掉 那麼就會成為 「媽媽已經把飯做好了,然後再等待兒子5分鐘的買公尺」
首先說明我也還是個初學者,有些東西是別人寫的,我只是學習,分享哈,有不對的希望高手詳解一下。謝謝。
MYSQL學習筆記 關於MySQL儲存過程 4
1.什麼是儲存過程?簡單來說,就是為以後的使用而儲存的一條或多條mysql語句的集合。2.為什麼使用儲存過程?通過把處理封裝在容易使用的單元中,簡化複雜的操作。批量處理,簡化對變動的管理。統一介面,確保了資料的安全。3.儲存過程的使用 使用無參 create procedure 函式名 begin ...
執行緒學習的筆記
學習執行緒 1.interrupt thread t1 new thread new somerunable class somerunable implements runnable public void run thread.sleep 10000 system.out.println ove...
關於執行緒安全的學習
背景 最近在學習一套庫函式,因為涉及到資料的讀寫操作,所以庫函式提供了lock與unlock函式用於對寫操作進行保護。需要保護的原因是函式庫沒有自己的執行緒,它們執行在庫函式呼叫者的執行緒中 所以如果沒有保護機制,如果出現多個執行緒同時去做寫資料操作就會導致共享資料出錯 這類函式也稱之為非執行緒安全...