總結程序就是正在執行的程式,是作業系統執行程式是產生的,它是獨立存在的,程序之間互不干擾。
執行緒是程序的乙個子集,是程序中的實際運作單位,開發人員可以通過操作執行緒進行多處理器程式設計。
1)在耗時的操作時使用執行緒,可以提高程式執行的速度
2)在並行操作時使用執行緒,提高並行的速度
3)多cpu系統中使用執行緒,提高cpu利用率
4)改善程式結構,對乙個程式進行拆分,降低程式執行難度
5)程序之間的通訊十分不方便,同乙個程序中的執行緒可以進行資料共享
在 j**a 中實現執行緒的方式有 2 種,一種是繼承 thread,一種是實現 runnable 介面。
class
mythread
extends
thread}}
}public
class
threaddemo
}
執行結果:
ticket =
5ticket =
4ticket =
5ticket =
5ticket =
4ticket =
3ticket =
2ticket =
1ticket =
4ticket =
3ticket =
3ticket =
2ticket =
1ticket =
2ticket =
1
每個執行緒單獨賣了5張票,即獨立的完成了買票的任務,但實際應用中,比如火車站售票,需要多個執行緒去共同完成任務,在本例中,即多個執行緒共同買5張票。
class
mythread
implements
runnable}}
}public
class
runnabledemo
}
執行結果:
ticket =
5ticket =
2ticket =
1ticket =
3ticket =
4
在第二種方法(runnable介面實現多執行緒)中,買票輸出的順序並不是54321,這是因為執行緒執行時會被搶占資源,所以輸出結果不唯一。ticket並不是原子操作。
public
class
synchronizeddemo
implements
runnable
public
void
setname
(string name)
public
static
integer
getcount()
public
static
void
setcount
(integer count)
public
synchronizeddemo()
public
synchronizeddemo
(string name)
@override
public
void
run(
)catch
(interruptedexception e)
// synchronized關鍵字裡面必須具備唯一性
// 這裡由於是對同乙個物件開啟多執行緒,所以this是唯一的
synchronized
(this)}
}}}public
test
}
執行結果:
"c:\program files\j**a\jdk-11.0.9\bin\j**a.exe"
thread
[光頭強,
5,main] 開始吃蘋果, 還剩4個蘋果
thread
[熊二,
5,main] 開始吃蘋果, 還剩3個蘋果
thread
[熊大,
5,main] 開始吃蘋果, 還剩2個蘋果
thread
[熊大,
5,main] 開始吃蘋果, 還剩1個蘋果
thread
[熊二,
5,main] 開始吃蘋果, 還剩0個蘋果
public
class
synchronizeddemo
implements
runnable
public
void
setname
(string name)
public
static
integer
getcount()
public
static
void
setcount
(integer count)
public
synchronizeddemo()
public
synchronizeddemo
(string name)
@override
public
synchronized
void
run(
)catch
(interruptedexception e)
if(count >0)
}}}public
test
}
執行結果:
"c:\program files\j**a\jdk-11.0.9\bin\j**a.exe"
thread
[光頭強,
5,main] 開始吃蘋果, 還剩4個蘋果
thread
[熊二,
5,main] 開始吃蘋果, 還剩3個蘋果
thread
[熊大,
5,main] 開始吃蘋果, 還剩2個蘋果
thread
[熊大,
5,main] 開始吃蘋果, 還剩1個蘋果
thread
[熊二,
5,main] 開始吃蘋果, 還剩0個蘋果
(1)wait():使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。
(2)sleep():使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉interruptedexception異常。
(3)notify():喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某乙個等待狀態的執行緒,而是由jvm確定喚醒哪個執行緒,而且不是按優先順序。
(4)allnotity():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒乙個物件的鎖,而是讓它們競爭。
綜合案例**
簡單多執行緒死鎖案例
在多執行緒程式中死鎖的乙個令人頭疼的問題,為了避免死鎖就要避免死鎖產生,就要知道死鎖產生的條件 死鎖產生的原因是同步巢狀,所以在開發過程中要盡量避免同步巢狀 下面是我的乙個簡單的同步死鎖案例 定義兩個鎖 class lock寫乙個執行緒 public class threaddemo4 extend...
多執行緒簡單案例 join( ) lock()
join 在呼叫結束前,主線程不會結束 不加的話,主線程會在子執行緒結束前繼續執行 並行 加了join 主線程會等待子執行緒結束後在繼續執行下去 序列 python3 main print number stop after son thread stop son thread print id i...
Python 多執行緒簡單案例 執行緒同步
codeing utf 8 import time import threading 執行緒同步 class mythead threading.thread def init self,name,delay threading.thread.init self self.name name sel...