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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理

發布時間:2024/9/27 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

我們在工作中線程技術很多情況下都能用的到,而且我們在面試的時候,線程技術基本上也是必問的。今天我來從線程的實現方式以及線程的生命周期做一個全面的講解與分析,幫助大家能更好的去了解線程技術。

概念

我們先來了解下線程和進程的概念以及區別:

1、什么是進程

進程是計算機執行應用程序的執行動作。當你運行一個程序的時候也就是完成了一個進程的啟動(比如啟動微信或者QQ)。如圖所示

2、什么是線程

線程是進程內獨立運行的一個單位,而進程他可以由一個或者多個線程組成,但是一個線程只能對應一個進程。

如何創建線程

創建線程有繼承Thread類、實現Runnable接口或者通過Callable和Future創建線程三種方法,具體創建過程如下。 本文來源于公眾號:【Java學習提升】?專注于Java領域技術分享,Java知識體系學習、分享面試經驗,讓我們結伴而行,共同成長!

1、繼承Thread類

下面我們通過代碼來看下繼承Thread類創建線程的具體步驟:

首先我們需要定義一個類來集成Thread類,繼承過后需要重寫Thread類的run()方法,代碼如下:

然后我們調用該線程類對象的start()方法來啟動線程,代碼如下:

運行結果如下:

2、實現Runnable接口

我們還可以通過實現Runnable接口來創建線程類,具體如下:

首先我們需要創建一個類來實現Runnable接口,同樣我們也需要重寫run()方法

然后我們創建Runnable實現類的對象,把這個實現類的對象作為Thread類的target對象來創建線程,最后得到的Thread類的對象才是真正的線程對象,運行start()方法來啟動線程

結果如下:

3、通過Callable和Future創建線程

首先創建一個類實現Callable接口,并且重寫call()方法

然后使用FutureTask來包裝MyCallable對象,同樣和上面一樣把FutureTask類的對象作為Thread類的target對象來創建線程并用start()方法來啟動。

通過上面的例子我們發現,已經不是重寫run()方法而是重寫call()方法,并且還能自定義返回值,另外還有一個值得注意的問題是FutureTask實際上是實現了Runnable類并且也繼承了Future接口,很顯然FutureTask具有這兩者的雙重特征。

線程的生命周期

線程的生命周期包含新建狀態、就緒狀態、運行狀態、阻塞狀態和銷毀狀態等5個狀態。

1、新建狀態

我們使用new()方法,讓它有自己的內存空間,這樣new出來的就是線程的新建狀態。

2、就緒狀態

從上面的例子中可以看出,當我們調用start()方法時,就進入了就緒狀態。注意這個時候線程不會立刻執行,而是等待CPU給他分配資源,當獲得了CPU資源就開始執行,這個是面試官經常問的點。

3、運行狀態

當線程獲得CPU的資源時就進入了運行狀態,這里我來重點說明一下運行狀態的線程,面試官經常在這里做文章。

因為處于運行狀態的線程是非常復雜的,它有可能會變成就緒狀態、阻塞狀態或者死亡狀態。

當執行run()方法時,如果線程在運行過程中失去了CPU資源的時候(如調用yield()方法),該線程就會暫停運行,因為線程已經從運行狀態變成了就緒狀態。

那么通過哪些方式能讓線程從運行狀態變成就緒狀態呢?

當正處在運行中的線程調用sleep方法時,會主動放棄占用的系統資源

當正處在運行中的線程調用一個阻塞式IO方法時,如果一直在等待該方法返回值的時候,那么就會造成線程被阻塞

調用yield()方法會暫停當前正在運行的線程

線程正在等待通知(notify)

調用了線程的suspend方法將該線程掛起

當然除了線程在運行狀態變成就緒狀態外,還能直接讓運行狀態的線程變成銷毀狀態,比如線程出現了異常或者調用了stop()、desyory()等方法。

4、阻塞狀態

如果執行了sleep()方法,這時就會讓線程進入阻塞狀態,當然造成這種情況的不只是只有調用sleep方法,比如當等待I/O設備的時候也會造成線程進入阻塞狀態。

5、銷毀狀態

當線程運行結束的時候,或者被強制終止的時候,線程就進入了銷毀狀態。當然還有我們上面提到的運行過程中發生異常的情況、JVM異常結束、調用了stop()、desyory()等方法都會使線程進入銷毀的狀態。注意處于銷毀狀態的線程是不能復活的,如果強制調用start()方法,則會拋出java.lang.IllegalThreadStateException異常。

下面附一張完整的線程生命周期圖:

總結

希望通過本文能帶大家更好的去了解線程技術、線程與進程的區別、線程的三個實現方法和他們的區別以及線程的生命周期,幫助大家在工作中能更好的去開發程序。

原創聲明:本文為【Java學習提升】原創博文,轉載請注明出處。

本文來源于公眾號:【Java學習提升】?專注于Java領域技術分享,Java知識體系學習、分享面試經驗,讓我們結伴而行,共同成長

總結

以上是生活随笔為你收集整理的java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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