成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java并發編程系列之一:Thread簡介

開發 后端
線程是一個程序的多個執行路徑,執行調度的單位,依托于進程存在。 線程不僅可以共享進程的內存,而且還擁有一個屬于自己的內存空間,這段內存空間也叫做線程棧,是在建立線程時由系統分配的,主要用來保存線程內部所使用的數據,如線程執行函數中所定義的變量。

[[409711]]

線程的概述

線程是一個程序的多個執行路徑,執行調度的單位,依托于進程存在。 線程不僅可以共享進程的內存,而且還擁有一個屬于自己的內存空間,這段內存空間也叫做線程棧,是在建立線程時由系統分配的,主要用來保存線程內部所使用的數據,如線程執行函數中所定義的變量。

注意:Java中的多線程是一種搶占機制而不是分時機制。搶占機制指的是有多個線程處于可運行狀態,但是一個CPU同時只允許一個線程在運行,他們通過競爭的方式搶占CPU。

線程的狀態

NEW(新建狀態):當一個線程的實例被創建即使用new關鍵字和Thread類或其子類創建一個線程對象后,此時該線程處于新生(new)狀態,處于新生狀態的線程有自己的內存空間,但該線程并沒有運行,此時線程還不是活著的

RUNNABLE(就緒狀態):當一個新建的線程執行Thread.start()以后,線程進入就緒狀態。這個狀態的線程已經做好了運行的準備工作,但是還沒有真正執行run方法的代碼。

RUNNING(運行中):當一個就緒狀態的線程,被CPU選中,分配時間片開始執行,就進入到運行中狀態。這個狀態的線程已經在真正執行run方法。

BLOCKED(阻塞狀態):一個運行中的線程,有兩種情況會進入阻塞狀態。一個是等待獲取synchronized鎖的時候;另外一個是一個獲取到synchronized鎖的線程調用Object.wait方法后被喚醒,會進入阻塞狀態,因為它需要重新獲取之前已經得到的鎖。該狀態下的線程,在取到鎖以后,進入就緒狀態。

WAITING(等待狀態):一個運行中的線程,執行Object.wait()、Thread.join()、LockSupport.park()等方法就會進入等待狀態。等待狀態的線程,需要被其他線程喚醒(Object.notifyAll()、LockSupport.unpark()),喚醒以后進入就緒狀態。

TIMED_WAITING(等待一定時間狀態):一個運行中的線程,執行Thread.sleep(timeout)、Object.wait(timeout)、Thread.join(timeout)、LockSupport.parkNanos(timeout)、LockSupport.parkUntil(timeout)等方法進入到等待一定時間狀態。這個狀態的線程,在等待超時或者被其他線程喚醒后,進入到就緒狀態。

TERMINATED(終止狀態):一個線程執行完畢或者被異常中斷以后進入該狀態,該狀態下isAlive方法返回false。

常用方法

  • start方法

start()用來啟動一個線程,當調用start方法后,系統才會開啟一個新的線程來執行用戶定義的子任務,在這個過程中,會為相應的線程分配需要的資源。

  • run方法

run()方法是不需要用戶來調用的,當通過start方法啟動一個線程之后,當線程獲得了CPU執行時間,便進入run方法體去執行具體的任務。

  • sleep方法

sleep相當于讓線程睡眠,交出CPU,讓CPU去執行其他的任務。需要注意的是,sleep方法不會釋放鎖,也就是說如果當前線程持有對某個對象的鎖,在sleep生效期間,其他線程是無法獲取該對象的synchronized鎖。

  • yield方法

調用yield方法會讓當前線程交出CPU權限,讓CPU去執行其他的線程。它跟sleep方法類似,同樣不會釋放鎖。但是yield不能控制具體的交出CPU的時間,另外,yield方法只能讓擁有相同優先級的線程有獲取CPU執行時間的機會。yield方法讓線程從RUNNING狀態回到RUNNABLE狀態。

  • join方法

A線程執行B線程的join方法以后,A線程需要等B線程執行完成以后才能繼續執行。從狀態角度來講,A線程在執行B線程的join方法以后,A線程進入到WAITING或者TIMED_WAITING狀態,一直等到B線程進入到TERMINATED狀態或者等待超時以后,A線程才會回到RUNNABLE狀態。

  • wait方法

wait方法是Object類就實現的方法,線程執行該方法以后,進入到WAITING或者TIMED_WAITING狀態,在被其他線程喚醒或者等待超時后,進入到RUNNABLE狀態。需要注意的是,調用wait方法會釋放已經獲取到鎖,等線程被喚醒以后會進入到BLOCKED狀態。直到重新拿到鎖以后,才會進入到RUNNABLE狀態。

  • notify/notifyAll方法

notify/notifyAll方法也是Object類就實現的方法,執行該方法以后,可以喚醒等待隊列里面一個/全部線程,讓他們進入到RUNNABLE狀態。 

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2012-09-24 14:03:58

C#網絡協議C

2016-09-26 17:09:28

Java并發編程內存模型

2021-11-06 19:52:20

源碼ReadThread

2022-02-28 14:54:48

openHarmon鴻蒙操作系統

2009-06-01 11:28:48

EquinoxOSGi入門

2010-06-17 15:43:50

UML創始人

2017-09-19 14:53:37

Java并發編程并發代碼設計

2017-03-27 21:59:57

TDD開發編程

2025-02-17 00:00:25

Java并發編程

2025-02-19 00:05:18

Java并發編程

2025-06-18 08:10:00

Java并發編程開發

2011-12-29 13:31:15

Java

2019-01-10 08:33:17

物聯網IoT機器

2018-04-12 21:31:31

物聯網發展趨勢互聯網

2009-10-23 13:24:20

linux Shell

2022-03-31 07:52:01

Java多線程并發

2011-10-11 10:39:24

2021-06-11 07:49:01

Docker容器安全 應用程序

2021-09-26 05:05:46

GoFiber Express

2021-05-19 07:13:16

Thread-Per-設計模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91大神在线资源观看无广告 | 一区二区三区不卡视频 | 国产午夜精品福利 | 高清免费av | 亚洲精品欧美一区二区三区 | 精品永久 | 四虎最新| 亚洲日本欧美日韩高观看 | av一区二区三区四区 | 日韩精品一区二区三区中文字幕 | 亚洲黄色视屏 | 国产精彩视频在线观看 | 亚洲国产午夜 | 欧美综合一区 | 亚洲高清一区二区三区 | 成人网视频 | 欧美日韩在线免费观看 | 亚洲欧美中文日韩在线v日本 | 久久免费国产 | 久久久国产精品 | 91在线看 | 999久久久| 一本一道久久a久久精品蜜桃 | 天天干天天色 | 国产精品免费看 | 国产一区二区三区免费 | 精品久久久久久久久久久久久久 | 毛片免费看的 | 日韩视频区 | 99热国产精品 | 久久久久99 | 少妇无套高潮一二三区 | 一区二区三区四区在线视频 | 欧美日韩在线一区二区三区 | 日本a视频 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲色图第一页 | 精品欧美一区免费观看α√ | a国产视频| 黄网站在线播放 | 日本久久一区 |