《網際網路程式設計》 第3周多執行緒程式設計技術

2022-06-21 20:18:08 字數 1509 閱讀 7286

總述,這周學了多執行緒,區別於單執行緒的拉胯操作:只能你一問,我一答的操作。多執行緒可以做到讓執行緒來處理主程式的東西,使得整個程式在很多情況下不會卡死。

好了,覆盤一下今天的多執行緒學習的東西。

在計算機體系結構中,多執行緒是由作業系統支援的**處理器(或多核處理器中的單核)同時具有執行多個執行緒能力的方法。

在單個處理器上執行的具有兩個執行執行緒的程序示意圖

借用我們上週的簡單網路對話程式。

在我們的tcpserver程式中新增一條語句:

pw.println("from伺服器:重複的訊息" + msg);

啟動伺服器和窗體程式之後我們傳送訊息會發現如下問題:

我們的訊息存在「滯後」現象,其實這裡是因為單執行緒在作怪,我們原本的程式只有一問一答的,receive()方法只有一次,所以只回傳一條資訊。

既然有問題,那就要解決問題。

所以我們就要使用到多執行緒的方法了。

我們多執行緒可以在連線的時候啟動了。

詳細**如下:

1 readthread = new thread(()->);12}

13//

跳出了迴圈,說明伺服器已關閉,讀取為null,提示對話關閉

14 platform.runlater(()->);

17});

18 readthread.start(); //

啟動執行緒

多執行緒注意:這裡要刪除btnsend按鈕的點選事件裡接受伺服器**回傳的資訊,因為這部分的工作給執行緒去做了。不刪的話會卡死整個程式。

string receivemsg = tcpclient.receive();//

從伺服器接收一行字元

//這兩行都要刪去或注釋掉

當我們沒有斷開連線的時候,直接點選「退出」按鈕,伺服器端就會報錯。

為什麼呢?原因其實是在exit()函式中有兩個語句:

tcpclient.send("bye");//

直接傳送bye,結束執行緒

tcpclient.close();//

這裡存在乙個問題就是:執行緒還在請求,但這條語句已經執行了,所以報錯

解決方法:

private

void

exit()

catch

(interruptedexception e)

tcpclient.close();

}system.exit(0);

}

exit

當你不會的時候寫:alt+ctrl+t,這個快捷鍵方便到起飛!

網際網路併發程式設計(1) 執行緒基礎

1 執行緒安全概念 當多個執行緒訪問某乙個類 物件或方法 時候,這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。2 synchronized 可以在任意物件以及方法上加鎖,而加鎖的這段 稱為互斥區或者臨界區。案例1 不加synchronized package com.wu...

網際網路併發程式設計(3) 髒讀

內容 資料的髒讀 對於物件的同步和非同步的方法中,我們在設計程式時候要注意問題的整體性,否則就會出現資料不一致情況,最典型的就是髒讀。髒讀的定義 髒讀又稱無效資料的讀出,是指在資料庫訪問中,事務t1將某一值修改,然後事務t2讀取該值,此後t1因為某種原因撤銷對該值的修改,這就導致了t2所讀取到的資料...

網際網路介面安全程式設計

1 使用者資訊脫敏,包括但不限於密碼 姓名 郵箱 位址 證件號等,必須加密後落庫。方式a md5 salt。md5準確說不是加密,只是資訊摘要,容易受到彩虹表攻擊,這裡一定要加salt使用。方式b 對稱加密。2 防串改。採用https協議。在http的基礎上加上了ssl,如果要破解,要破ca證書 拿...