Java線程進程

      網友投稿 729 2022-05-29

      1 進程和線程

      進程:

      進程是并發執行程序在執行過程中,資源分配和管理的基本單位。

      進程可以理解為一個應用程序的執行過程,應用程序一旦執行,就是一個進程。

      線程:

      線程是進程的一個執行單元,是進程內可調度實體。

      線程是比進程更小的獨立運行的基本單位。

      線程也被稱為輕量級進程。

      二者的區別:

      名稱

      進程

      線程

      地址空間

      不同的進程之間的地址空間是獨立的

      同一進程的所有線程共享本進程的地址空間

      資源擁有

      進程之間的資源是獨立的,無法共享

      同一進程的所有線程共享本進程的資源

      執行過程

      每一個進程可以說就是一個可執行的應用程序

      線程不能夠獨立執行,必須依存在應用程序中

      2 創建線程的五種方式

      2.1 繼承Thread類

      通過繼承Thread并且重寫其run()方法,run方法中定義需要執行的任務。

      創建后的子類通過調用start()方法即可執行線程方法。

      注意:通過繼承Thread實現的線程類,多個線程間無法共享線程類的實例變量。需要創建不同Thread對象,自然不共享資源。

      2.2 實現 Runnable 接口

      需要先定義一個類實現 Runnable 接口并重寫該接口的 run() 方法,此run方法是線程執行體。

      接著創建Runnable實現類的對象,作為創建Thread對象的參數target,此Thread對象才是真正的線程對象。

      利用實現Runnable接口的線程類創建對象,可以實現線程之間的資源共享。

      2.3 實現Callable 接口實現帶有返回值的線程

      Callable接口如同Runnable接口的升級版,其提供的call()方法將作為線程的執行體,同時允許有返回值。

      Java線程和進程

      Callable對象不能直接作為Thread對象的target,因為Callable接口是JAVA5新增接口,不是Runnable接口的子接口。

      對于這個問題的解決方案,就引入Future接口,此接口可以接受call()的返回值,RunnableFuture接口是Future接口和Runnable接口的子接口,可以作為Thread對象的target

      2.4 繼承TimerTask

      Timer 和 TimerTask 可以作為實現線程的另一種方式。

      Timer 是一種線程設施,用于安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行,可以看成一個定時器,可以調度TimerTask。

      TimerTask 是一個抽象類,實現了Runnable接口,所以具備了多線程的能力。

      2.5 通過線程池啟動多線程

      通過Executors 的工具類可以創建線程池。

      提高系統響應速度,當有任務到達時,通過復用已存在的線程,無需等待新線程的創建便能立即執行。

      降低系統資源消耗,通過重用已存在的線程,降低線程創建和銷毀造成的消耗。

      方便線程并發數的管控,因為線程若是無限制的創建,可能會導致內存占用過多而產生OOM,并且會造成CPU過渡切換。

      2.5.1 線程池一:FixThreadPool(int n)固定大小的線程池

      2.5.2 線程池二:SingleThreadPoolExecutor 單線程池

      單線程串行執行任務,確保任務按提交順序執行;

      當線程異常結束后,會有新的線程代替之前的線程。

      2.5.3 線程池三:CachedThreadPool() 緩存線程池

      線程池數量不固定,可以達到最大值。

      線程可被重復利用和回收。

      2.5.4 線程池四:newScheduledThreadPool()

      創建一個周期性的線程池,支持定時及周期性執行任務

      創建線程時,指定核心線程數,當執行任務較多超過核心線程時,可額外啟動新的線程;

      當任務恢復后,僅保留核心線程,其它額外線程將被關閉。

      2.5.5 線程池五:newWorkStealingPool 新的線程池類 ForkJoinPool 的擴展

      JDK1.8新增加

      任務竊取線程池,線程有屬于自己的隊列,更加適用于多核心處理器。

      3 Thread類和Runnable接口區別

      實現Runnable接口,避免多繼承局限;

      實現Runnable接口,可以更好的體現資源、數據共享的概念;

      Thread類也是Runnable接口的實現類。

      4 線程start和run方法的區別

      直接調用線程類下的run方法,并不會啟動線程,只是作為普通方法來執行;

      如果要啟動線程來執行,必須要調用 start 方法。

      5 線程的優先級

      Java線程的優先級范圍是1-10,默認優先級是5,10最高;

      線程的優先級仍然無法保障線程的執行次序;

      優先級高的線程獲取CPU資源的概率較大,優先級低的也并非沒機會執行;

      主線程main的優先級是5。

      Java 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:python批量提取word文檔中的圖片(含圖片格式轉換和GUI)
      下一篇:3條“錦囊”妙計破解企業出海難題
      相關文章
      中文无码亚洲精品字幕| 亚洲精品tv久久久久久久久 | 久久亚洲精品无码播放| 日韩va亚洲va欧洲va国产| 日韩国产欧美亚洲v片| 亚洲中文字幕久久精品蜜桃| 亚洲黄色在线观看视频| 亚洲综合AV在线在线播放| 国产成人精品日本亚洲专区61 | 亚洲尹人九九大色香蕉网站| 久久亚洲精品成人综合| 亚洲乱码日产一区三区| 亚洲色偷拍另类无码专区| 亚洲人成网站色在线入口| 亚洲成人高清在线| 亚洲成av人片在www鸭子| 亚洲av无码专区在线电影天堂| 亚洲成a∧人片在线观看无码| 亚洲精品国产首次亮相| 午夜亚洲国产理论片二级港台二级| 亚洲国产成人综合精品| 老牛精品亚洲成av人片| 国产成人不卡亚洲精品91| gogo全球高清大胆亚洲| 亚洲av无码天堂一区二区三区| 亚洲日韩国产成网在线观看| 亚洲综合区小说区激情区| 亚洲色偷偷偷鲁综合| 亚洲AV第一页国产精品| 亚洲综合在线观看视频| 亚洲国产成人精品无码一区二区| 国产精品久久亚洲不卡动漫| 亚洲国产成人手机在线观看| 亚洲高清国产拍精品青青草原| JLZZJLZZ亚洲乱熟无码| 亚洲av之男人的天堂网站| 亚洲午夜久久久精品影院| 亚洲成a人片在线网站| 亚洲kkk4444在线观看| 亚洲成AV人影片在线观看| www.91亚洲|