日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程id 获取线程名称_016 线程及初步网络编程

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程id 获取线程名称_016 线程及初步网络编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

涉及內容:多線程的安全問題、線程的優先級、暫停線程的執行、線程同步、死鎖和死鎖的解決辦法、生產者消費者模式的實現、網絡編程三要素、IP端口及Socket的含義

1. 獲取線程基本信息的方法

(1) 獲取線程基本信息的方法有哪些?

Static Thread currentThread()返回目前正在執行的線程

Final String getName()返回線程的名稱

Final boolean isAlive判斷線程是否處于活動狀態

2. 多線程的安全性問題

(1) 多線程操作共享資源時數據的安全性問題是如何產生的?

多線程操作共享資源時,會搶占CPU的資源,如果線程在CPU給定的時間片內沒有完成一個完整的任務就被換下來的話,會造成判斷與執行結果不相符。共享資源的實時狀態沒有及時更新到線程任務中,因為線程被強行分段執行了。所以會造成數據錯亂,產生臟數據,安全性問題。

3. 暫停線程執行sleep_yield_join_stop

(1) 暫停線程執行的方法有哪些?

Final void join()調用該方法的線程強制執行,其他線程處于阻塞狀態,該線程執行完畢后,其他線程再執行。當某個線程等待另一個線程執行結束后,才繼續執行。使調用該方法的線程在此之前執行完畢,也就是等待調用該方法的線程執行完畢后再往下繼續執行。

Static void sleep(long millis)使當前正在執行的線程休眠millis毫秒,線程處于阻塞狀態。不會釋放鎖,sleep時別的線程也不可以訪問鎖定對象。

Static void yield()當前正在執行的線程暫停一次,允許其他線程執行,不阻塞,線程進入就緒狀態,如果沒有其他等待執行的線程,這個時候當前線程就會馬上恢復執行。讓出CPU的使用權,從運行狀態直接進入就緒狀態。讓CPU重新挑選哪一個線程進入運行狀態。

Final void stop() 強迫線程停止執行。已過時,不推薦使用。

(2) sleep,yield,join方法將會導致線程進入什么狀態?

Sleep 阻塞狀態;

Yield 就緒狀態;

Join 調用該方法的線程執行狀態,其他線程進入阻塞狀態。

4. 線程的優先級問題

(1) 設置和獲取線程的優先級的方法分別是什么?

Final int getPriority()獲取線程的優先級

Final void setPriority(int priority)設置線程的優先級

(2) 新創建的線程是否有優先級?線程的最高優先級及最低優先級是什么?

新創建的線程優先級是默認優先級NORM_PRIORITY:5

最高優先級MAX_PRIORITY:10

最低優先級MIN_PRIORITY:1

優先級越高越有可能先被調用執行,但是不一定。

5. 線程同步_具體實現

(1) 在Java中實現線程同步的方法有哪些?

線程同步:在一個線程執行一次任務時,對共享資源加鎖,不允許其他的線程訪問共享資源。

1-同步代碼塊

Synchornized(obj){

//其中的obj稱為同步監視器,this當前對象

同步代碼塊,指當前線程執行一次任務的代碼。

}

2-同步方法

Private synchornized void saleTicket(){

//將買票過程打包成私有方法,然后在run方法中調用

}

同步監視器只能是對象,推薦使用資源共享的對象,可以是當前對象this,也可以是其他對象。

(2) 線程同步實現的前提是什么?簡述同步方法和同步代碼塊的同步監視器?

線程同步實現的前提是多個線程訪問一個共享資源,且多個線程使用同一個鎖。要注意明確哪些代碼是多線程代碼,哪些是共享數據,哪些語句是操作共享數據的。

同步方法中沒有顯式指定同步監視器,因為同步方法的同步監視器必然是調用該方法的當前對象。同步代碼塊中要傳參指定同步監視器,一般也規定為this當前對象。

6 死鎖_死鎖的解決辦法

(1) 死鎖產生的原因是什么?

在多線程操作時,互相等待對方的資源。

(2) 如何解決死鎖問題?常用的算法有什么?

不要讓兩個對象同時持有對象鎖,采用互斥方式來解決。

銀行家算法:該算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。這樣申請者就可很快完成其計算,然后釋放它占有的資源,從而保證了系統中的所有進程都能完成,所以可以避免死鎖的發生。(計算資源的大小,計算出來后,永遠按照從大到小的方式來獲得鎖)

7. 生產者消費者模式的實現_1

(1) 簡述生產者和消費者模式的原理?

生產者和消費模式,分為生產者線程類和消費者線程類。生產者線程類不斷生產商品,消費者線程類不斷取走商品,商品就是這兩類線程所共享的資源。

(2) 生產者和消費者模式會導致哪些問題的產生?

會導致數據錯亂,消費者重復取走了商品。

8. 生產者消費者模式的實現_2

(1) 線程間通信的原理是什么?

生產者線程生產完商品通知消費者線程取走商品,消費者線程取走商品后通知生產者線程開始生產商品。

(2) 線程間通信的方法有哪些?

Wait():調用了wait方法的線程進入等待池進行等待,等待池中的線程不去競爭對象鎖,直到其他的線程通知,才會進入鎖池。

Notify():隨機喚醒一個在該對象上等待的線程,被喚醒的線程進入鎖池,開始競爭該對象上的鎖

notifyAll():喚醒所有在該對象上等待的線程,優先級高的線程有可能先競爭到對象鎖

共享資源Goods類的代碼

public class Goods {

private String name; // 商品名稱

private String brand; //商品品牌

private boolean isFlag; //是否有商品,有商品時為true,生產者線程等待。無商品時為false,消費者線程等待。以次避免重復生產和重復消費的情況出現。

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getBrand() {

return brand;

}

public void setBrand(String brand) {

this.brand = brand;

}

public Goods(String name, String brand) {

super();

this.name = name;

this.brand = brand;

}

public Goods() {

super();

}

public synchronized void set(String brand,String name) {

if(isFlag) { //如果有商品時,生產者線程進入等待,直到消費者線程將商品取走后通知

try {

super.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

this.setBrand(brand);

try {

Thread.sleep(300);

} catch (InterruptedException e) {

e.printStackTrace();

}

this.setName(name);

System.out.println("生產者線程生產了"+this.getBrand()+this.getName());

isFlag=true; //生產完商品,有了商品了,將isFlag值為true,若再分配到資源也會進行等待,不會再被調用

super.notify(); //貨備好了,通知消費者線程來取貨!!

}

public synchronized void get() {

if(!isFlag) { //如果沒貨了,無貨可取,消費者等一等

try {

super.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

try {

Thread.sleep(300);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("消費者線程取走了"+this.getBrand()+this.getName());

isFlag=false; //每次取完,將代表存貨狀態的布爾值isFlag值為false,即使再被CPU選中也會進入等待狀態,不會和生產者線程搶資源和對象鎖。

super.notify(); //取完了,沒貨了,通知生產者趕緊生產!

}

}

9. 網絡編程的基本概念

(1) 網絡編程的三要素是什么?

IP地址:唯一標識網絡上的每一臺計算機,兩臺計算機之間通信的必備要素;

端口號:計算機中應用的標號(代表一個應用程序),0-1024系統使用或保留端口,端口號占2個字節,所以有效端口0-65535;編程時一般使用10000以上的端口號。

通信協議

(2) 簡述通信協議?

通信的規則 TCP(Transmission Control Protocol傳輸控制協議 ),UDP(User Datagram Protocol用戶數據電報協議)。通信協議一致的情況下要求端口號唯一。

10. IP_端口_Socket含義

(1) IP地址的分類?

IP地址用于標識網絡上的唯一一臺計算機,共32位,4個8位二進制數組成

IP地址分為:IPv4和IPv6

IPv4:“點分十進制表示法”

IPv6:“十六進制表示法”

IP地址=網絡ID+主機ID

網絡ID:標識計算機或網絡設備所有的網段;

主機ID:標識特定的主機或網絡設備

A類:8位網絡ID+24位主機ID 前八位取值范圍:1-126

B類:16位網絡ID+24位主機ID 128-191

C類:24位網絡ID+8位主機ID 192-223

D類:用于組播通信 224-239

E類:用于科研 240-255

特殊IP地址:127.0.0.1本機回環地址,用于本機測試

255.255.255.0 當前子網,一般用于當前子網廣播信息

(2) 簡述Socket的含義?

Socket稱為“套接字”,是計算機之間通信的一種約定或一種方式,通過Socket這種約定,一臺計算機可以接受其他計算機的數據,也可以向其他計算機發送數據。每一個客戶端都使用一個Socket對象表示,服務器端使用SeverSocket等待客戶端的連接。

生活案例:如果你想寫封信發給你遠方的朋友,如何寫信、將信打包,屬于應用層。信怎么寫,怎么打包完全由我們做主。而當我們將信投入郵筒時,郵筒的那個口就是套接字,在進入套接字之后,就是傳輸層、網絡層等(郵局、公路交管或者航線等)其他層次的工作了。我們從來不會去關心信是如何從西安發往北京的,我們只知道寫好了投入郵筒就OK了。

總結

以上是生活随笔為你收集整理的线程id 获取线程名称_016 线程及初步网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。