Java线程简介
主要是介紹一些線程相關的知識點,包括線程的生命周期,守護線程等,為后續的博客做一些鋪墊。
什么是線程
關于什么是線程,網上一大堆的介紹:
相對于進程,線程是操作系統(OS)調度的最小執行單元
線程的特點,根據線程的官方介紹可以看出:
幾個點需要說一下:
線程的生命周期
線程的生命周期分為***新建狀態***、就緒狀態、運行狀態、阻塞狀態 和 死亡狀態 5種狀態,這5種狀態的轉換如下圖所示:
- wait()
- sleep()
- join()
- 等待同步鎖
- 阻塞式I/O調用
守護線程
相對于正常線程,也就是所謂的用戶線程來說,守護線程主要是用于為用戶線程提供便利,這也是守護這個詞的含義,最典型的就是java系統的GC線程。
當所有用戶線程退出時,守護線程就沒有服務對象也沒有存在的意義,所以隨著jvm的退出,所有的守護線程都會被銷毀,這也就是java文檔的說明。
關于守護線程有如下幾個注意點:
關于第一點限制也很好理解,當你把啟動的用戶線程設置為守護線程時,可能剛好把唯一的用戶線程消滅了,然后jvm退出了,導致了第二點的問題。
舉個例子驗證一下上面說的,所有用戶線程退出后jvm退出導致守護線程銷毀的說法:
public class ThreadTest {public static void main(String[] args) {try {Thread thread = new Thread() {public void run() {try {int i = 0;while (true) {System.out.println(i++);Thread.sleep(200);}} catch (InterruptedException e) {e.printStackTrace();}}};thread.setDaemon(true);thread.start();Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}} } 復制代碼打印結果如下:
0 1 2 3 4Process finished with exit code 0 復制代碼結果也很明顯,每200毫秒打印一個數字,等主線程sleep結束就退出了。
如果把thread.setDaemon(true);注釋調可以看到,線程一直會打印到底。
總結
轉載于:https://juejin.im/post/5b9487005188255c5966e827
總結
- 上一篇: [react] 使用webpack打包R
- 下一篇: java美元兑换,(Java实现) 美元