国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java多線程高級應用

2019-11-06 08:24:28
字體:
來源:轉載
供稿:網友

1.線程概念 java所謂多線程,顧名思義,就是多道線程執行線索,那么為什么要多線程呢?如果你的部分代碼在執行某個i/o操作而受阻,那么程序的其他部分也不能執行,這樣就嚴重的浪費了cpu,多線程機制就是為解決這個問題。 多進程并行執行時,在cpu上執行的某個進程因為等待某種資源而受阻時,多任務操作系統可以使進程掛起,而根據FIFO原則,時間片輪轉等啟動另一個不同的進程執行,直到前一進程獲得 所需資源,才能喚醒該資源,讓他繼續執行。 這樣,在多任務操作系統的調度下,可以讓多個進程并行執行,能夠較好地利用CPU資源,但仍然難以滿足現代應用程序的需要。 例如,需要在同一應用程序中完成聲音播放、圖像顯示、網絡文件下載等多項工作,如果使用傳統的單線程程序,就只能順序的逐一實現,而使用多線程方法則可以并發實現。 進程把內存空間作為自己的資源之一,每個進程均有自己的內存單元,線程卻共享內存空間,通過共享的內存 空間來交換信息,從而有利于提高效率。 java引入了優先級的概念,優先級越高的線程,獲得cpu的權利越大,執行機會越多,java把優先級劃分為10個等級,數值也爽啊,優先級越高,在thread類中定義了三個優先級常量:MIN_PRIORITY,MAX_PRIORITY和NORM_PRIORITY,其直分別是1,10,5.如果沒有分配,java默認為norm_priority為5. 調度就是分配cpu資源,確定線程的執行順序,java采用搶占式調度,優先級高的線程具有剝奪低優先級線程的執行權利。如果一個低優先級的線程正在執行,這時出現一個高優先級的線程,那么低優先級的線程就會停止執行,放棄cpu,退回等待隊列中,等待下一輪的執行,而讓高優先級的線程立即執行。如果具有相同優先級的線程,按照先來先服務的調度原則。  我們設計程序時,應該讓高優先級的線程執行一段時間后能夠交出使用權,可以使用sleep()方法暫時進入睡眠,從而讓出cpu,使有相同優先級的線程和低優先級的線程有執行的機會。二是調用yield()而放棄cpu,這時和他有相同優先級的線程就有執行機會。 2.線程的生命周期   每個java程序都有一個缺省的主線程:對于application,主線程是main方法執行的線索,對于applet,主線程指揮瀏覽器加載并執行java小程序。要想實現多線程,必須在主線程中創建新的線程對象,java語言使用Thread及其子類的對象表達線程。, 1新建:當一個Thread類或子類對象被創建后進入這個狀態,這時線程對象已被分配內存空間,其私有數據已被初始化,但該線程還未被調度,可用start(調度),或stop(終止);新      生線程一旦被調度,就將切換到可執行狀態   2可運行:處于可執行環境隨時可以被調度而執行,分兩個子狀態:運行狀態和就緒狀態; 3 阻塞: 由某種原因引起線程暫停執行。 4 死亡:線程執行完畢或另一線程調用stop()方法使其停止時,進入停止狀態。他表示線程退出可運行狀態,并且不可能再進入可運行狀態。

這里寫圖片描述

Thread定義很多控制線程的方法:start()調用run()方法使線程開始執行; stop()立即停止,使其內部狀態清零; suspend()暫停線程執行,線程的所有狀態和資源保持不變,以后可以通過另一個線程調用resume()方法重新啟動這個線程。 isAlive() 線程處于新建狀態時,調用方法返回FALSE,當一個線程調用start()方法時,占用資源后,該線程run方法開始執行,在run方法結束前,即沒有進入死亡狀態之前,調用isAlive()返回true;,當線程進入死亡狀態后,實體內存被釋放,線程仍可以調用isalive();返回false; 創建線程方法: 生成Thread子類;生成一個類,聲明實現runnable接口;無論使用哪一個,我們可以控制的關鍵性操作有兩個:1定義用戶線程的操作,即定義用戶線程的run方法;2在適當的時候建立用戶線程實例。 class NewThread extends Thread { … public void run() { … } } 在需要創建NewThread這個線程的類或方法中,生成NewThread對象。 即 NewThread thread = new NewThread(); thread.start();

class NewThreadRun implements Runnable { … public void run() { … } } 用下面的代碼創建并執行新線程 NewThreadRun n = new NewThreadRun(); Thread thread = new Thread(n); thread.start(); Runnable是java.long包中的一個接口。任何一個類都可以實現這個接口,從而實現創建和執行線程的功能。實現Runnable接口的類必須覆蓋接口中定義的run()方法,它仍然是完成具體任務的地方。 以上兩種方法都可以創建和執行線程,前一種方法要求一定是Thread類的子類,后一種方法可以不是Thread類的子類,但必須實現Runnable接口,這種方法使用更加靈活。 有時還只能使用后一種方法,如某類已經定義為Applet類的子類,由于Java不允許多重繼承,這時不能再定義它為Thread類的子類,此時只有聲明其實現Runnable接口來創建和執行新線程。


上一篇:java IO

下一篇:java--Object

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陆川县| 富阳市| 尉犁县| 陵川县| 淅川县| 梧州市| 武清区| 石城县| 蒙自县| 东乡族自治县| 临沂市| 柘荣县| 资中县| 年辖:市辖区| 吉水县| 海宁市| 黔东| 阳江市| 巩义市| 秦皇岛市| 湄潭县| 孝义市| 三门县| 宁阳县| 保靖县| 合作市| 时尚| 克什克腾旗| 新郑市| 肥西县| 承德市| 班戈县| 东源县| 江津市| 来宾市| 深州市| 葫芦岛市| 清镇市| 榆中县| 九龙县| 罗平县|