總述,這周學了多執行緒,區別於單執行緒的拉胯操作:只能你一問,我一答的操作。多執行緒可以做到讓執行緒來處理主程式的東西,使得整個程式在很多情況下不會卡死。
好了,覆盤一下今天的多執行緒學習的東西。
在計算機體系結構中,多執行緒是由作業系統支援的**處理器(或多核處理器中的單核)同時具有執行多個執行緒能力的方法。
在單個處理器上執行的具有兩個執行執行緒的程序示意圖
借用我們上週的簡單網路對話程式。
在我們的tcpserver程式中新增一條語句:
pw.println("from伺服器:重複的訊息" + msg);
啟動伺服器和窗體程式之後我們傳送訊息會發現如下問題:
我們的訊息存在「滯後」現象,其實這裡是因為單執行緒在作怪,我們原本的程式只有一問一答的,receive()方法只有一次,所以只回傳一條資訊。
既然有問題,那就要解決問題。
所以我們就要使用到多執行緒的方法了。
我們多執行緒可以在連線的時候啟動了。
詳細**如下:
1 readthread = new thread(()->);12}多執行緒注意:這裡要刪除btnsend按鈕的點選事件裡接受伺服器**回傳的資訊,因為這部分的工作給執行緒去做了。不刪的話會卡死整個程式。13//
跳出了迴圈,說明伺服器已關閉,讀取為null,提示對話關閉
14 platform.runlater(()->);
17});
18 readthread.start(); //
啟動執行緒
string receivemsg = tcpclient.receive();//當我們沒有斷開連線的時候,直接點選「退出」按鈕,伺服器端就會報錯。從伺服器接收一行字元
//這兩行都要刪去或注釋掉
為什麼呢?原因其實是在exit()函式中有兩個語句:
tcpclient.send("bye");//解決方法:直接傳送bye,結束執行緒
tcpclient.close();//
這裡存在乙個問題就是:執行緒還在請求,但這條語句已經執行了,所以報錯
privateexitvoid
exit()
catch
(interruptedexception e)
tcpclient.close();
}system.exit(0);
}
當你不會的時候寫: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證書 拿...