內容:linux的乙個程序中可以包含多個執行緒,那麼程序的id通過getpid()得到,那麼執行緒的id要如何得到呢?
解析:執行緒的id其實有兩個,乙個是在程序內表示的id,乙個是在核心看來真正的id。
測試**:
測試結果:
結論:1.可以看到在程序中的id和在核心看來的id是不一樣的
2.在程序中的id表示只保證在此程序中是唯一的,不同程序中的執行緒id是可能相同的
3.當你給乙個程序的執行緒發生訊息,應該採取真正的執行緒id,而不是它在程序中表示的id
4.任何時刻都是唯一的,並且由於linux分配新的pid採用遞增輪迴辦法,如果對乙個執行緒**,再分配乙個執行緒,會發現這個新執行緒的id是剛才上乙個**的舊執行緒的id
5.因此:getpid()得到的是程序的pid,在核心中,每個執行緒都有自己; 要得到執行緒的pid,必須用syscall(sys_gettid); pthread_self()函式獲取的是執行緒id
執行緒建立的兩個方法
參看1.6版jdk thread類的說明 1 定義個自己的執行緒類 繼承至thread類 需要實現run方法。class primethread extends thread public void run 呼叫方式 primethread p new primethread 143 p.start...
兩個執行緒之間的通訊。。。。。
public class demo01 catch interruptedexception e thread t2 new thread catch interruptedexception e t1.start t2.start class mytask system.out.println 1...
兩個經典的執行緒安全示例分析
slf4j topic c.case1 public class case1 public static void main string args list.add t t.start 使得每個執行緒執行結束 list.foreach t catch interruptedexception e ...