實驗6多執行緒

2022-12-25 14:30:04 字數 2185 閱讀 2814

一、實驗名稱和性質

二、實驗目的

1. 理解執行緒概念;了解執行緒的狀態和生命週期;

2. 學習繼承thread類來建立執行緒;

3. 理解執行緒互斥與同步的含義;掌握synchrnized同步方法。

三、實驗內容

1.設計乙個包含多執行緒執行的程式,在主程式中依次建立3個執行緒,然後按順序啟動這3個執行緒,每個執行緒在執行時都是先睡眠(sleep)一會兒,醒來之後再繼續執行(驗證性實驗)。

2.用程式模擬鐵路火車票售票系統,實現通過3個售票視窗同時發售某次列車的100張車票。程式中會有3個執行緒同時對同乙個車票物件進行操作,每個執行緒的操作都按相同的步驟進行,即將當前車票數加1,然後將當前車票數與剩餘車票數顯示出來。由於車票數是臨界資源,一次只能有乙個執行緒完成讀寫操作,因此必須處理好執行緒之間的互斥關係(設計性實驗)。

四、實驗的軟硬體環境要求

硬體環境要求:

pc計算機;記憶體512mb以上

使用的軟體名稱、版本號以及模組:

作業系統:windows 2000或windows xp

軟體:jdk7.0;ecliplse

五、知識準備

前期要求掌握的知識:了解j**a程式的執行流程。

實驗相關理論或原理:多執行緒是指乙個程式中可以包含兩個或兩個以上同時併發執行的程式單元,每個程式單元稱之為乙個執行緒。j**a為多執行緒程式設計提供了語言級的支援,因此可以編寫高效率的程式。

乙個執行緒從它被建立到執行結束的過程,稱為執行緒的生命週期。在j**a中使用多執行緒有如下兩種方式:一是繼承thread執行緒類,第二是實現runnable介面。

在thread類中有兩個主要的方法,乙個是run()方法,另乙個是start()方法,在thread類的派生類中要覆蓋這個run()方法,將多執行緒**放入其中。start()方法的作用是啟動乙個執行緒,它會自動地去呼叫run()方法以執行該執行緒。

為了使多個執行緒互斥地使用臨界資源,可以在臨界資源上使用synchrnized修飾符。

六、驗證性實驗

1.實驗要求

編譯、執行程式,執行結果如圖7.1所示。

圖7.1 驗證性實驗執行結果

2.源程式**參考

class mythread extends thread

public void run()

+ " 結束休眠");

}}public class threethreads

}執行結果:

執行緒2 將休眠100毫秒

執行緒1 將休眠100毫秒

執行緒3 將休眠100毫秒

執行緒3 結束休眠

執行緒1 結束休眠

執行緒2 結束休眠

七、設計性實驗

1. 編譯、執行程式 ,結果如圖7.2所示。

圖7.2 設計性實驗執行結果

class ticket

}class saleticket implements runnable

public void run()

}public class testsaleticket

}執行結果:

2. 編寫程式,啟動1000個執行緒。每個執行緒給初始值為0的變數total加1。

通過引用傳遞的方式將total傳遞給每個執行緒。使用同步和不同步來執行這個程式,看看他們的效果。 提示:

為了能夠進行引用傳遞,需要定義包裝物件來儲存total變數。

**:同步:

package experimentsix;

public class testthread1

}private static class account

public synchronized void add()

}public static void main(string args)

}}執行結果:

不同步:

package experimentsix;

public class testthread

}public static void main(string args)

}}執行結果:

效果:使用同步可以避免資料不一致的問題,未使用同步有資料不一致的問題

實驗總結:

經過這次實驗,初步了解了執行緒的相關用法,但在使用過程中並不熟悉,實踐過程遇到較多問題,需要進一步學習了解;對執行緒的概念理解不到位,需要進一步理解。在程式設計的時候,例如寫售票的那個程式,大概知道要補充的是什麼內容,開始有點無從下手,具體的編寫總有遺漏和其他問題。

GDB多執行緒除錯

一直對gdb多執行緒除錯接觸不多,最近因為工作有了一些接觸,簡單作點記錄吧。先介紹一下gdb多執行緒除錯的基本命令。info threads 顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。thread id 切換...

多執行緒程式設計練習

實驗五 多執行緒程式設計練習 一 課堂範例的驗證 二 打字遊戲 三 實現書本上128頁上的練習6,7,8 至少3者選1 6.實現多執行緒互斥的方法 lock monit mutex和semaphores 1 lock關鍵字 將某語句塊標記為臨界區,確保該執行緒位於臨界區時,另乙個執行緒不得進入該臨界...

C多執行緒學習 二 如何操縱執行緒

下面我們就動手來建立乙個執行緒,使用thread類建立執行緒時,只需提供執行緒入口即可。執行緒入口使程式知道該讓這個執行緒幹什麼事 在c 中,執行緒入口是通過threadstart delegate 來提供的,你可以把threadstart理解為乙個函式指標,指向執行緒要執行的函式,當呼叫threa...