多線程的基礎知識

1、程序、進程、線程的基本概念

程序:為了完成某種任務用某一種語言編寫的一組指令的集合就叫程序。程序就是一段靜態的代碼。

進程:進程是程序的依次執行過程,或者說是正在運行的一個程序。這是一個動態的過程,有它自身的產生運行和消亡的過程--生命周期。進程是資源分配的基本單位。

線程:進程可進一步的劃分為線程,線程是一個程序內部的一條執行路徑。線程是調度和執行的基本單位,每一個線程擁有獨立的程序計數器和運行棧,線程之間切換的開銷相對來說比較小。

備注:一個Java程序至少有三個線程:main()線程、垃圾收集線程、異常處理線程。

2、并發和并行的基本概念

并行:多個CPU同時執行多個任務。

并發:一個CPU同時執行多個任務。

3、多線程程序的優點

  • 提高應用程序的響應時間
  • 提高計算機系統CPU的利用效率
  • 改善程序結構。

4、線程的分類

Java中的線程分為用戶線程和守護線程。

  • 他們兩者在幾乎每個方面都是相同的,唯一的區別就是判斷JVM何時離開
  • 守護線程是用來服務用戶線程的,但是也可以把一個用戶線程更改為守護線程
  • Java垃圾回收線程就是一個典型的守護線程
  • 如果JVM中的線程全部是守護線程的時候,JVM將會退出

5、線程創建的四種方式

  • 使用繼承Thread類的方式創建多線程
  • 使用實現Runnable接口的方式創建多線程
  • 使用實現Callable接口的方式創建多線程
  • 使用線程池的方式創建多線程

6、線程的生命周期

一個線程完整的生命周期通常包含五個部分:

  • 新建狀態:當一個Thread類及其子類的對象被聲明并創建時,新生的線程就處于新建狀態
  • 就緒狀態:新建的線程執行start()方法之后,將會進入線程隊列等待CPU時間片,此時的線程已經具備了執行的條件,只是沒有分配到CPU
  • 運行狀態:處于就緒狀態的線程被調度并且獲得了CPU時間片之后,就能執行狀態
  • 阻塞狀態:在某種情況下,當前的線程讓出CPU并臨時中斷自己的執行,此時的線程就進入了阻塞狀態
  • 死亡狀態:線程完成了全部的工作或者被強制提前結束或者線程出現異常導致線程結束

7、什么是線程的安全問題

  多線程安全問題,是由于多個線程在訪問共享的數據(共享的資源),并且操作共享數據的語句不止一條。那么這樣在操作多條共享數據的線程之間就可能發生線程切換。只要切換就可能有安全問題。

  當多個線程執行解決某個方法時,不管這些線程如何交替的執行,我們在主程序中不需要去做任何的同步,這個類的結果行為都是我們設想的正確行為,那么我們就可以說這個類時線程安全的。

轉載于:https://www.cnblogs.com/BaoZiY/p/10726400.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394189.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot實現單點登錄_什么是單點登錄,php是如何實現單點登錄的

文章來自:php中文網鏈接:https://www.php.cn/php-weizijiaocheng-429869.html作者:中文網商務合作:請加微信(QQ):2230304070視頻教程分享碼農網:http://www.mano100.cn/rjyfk_url-url.html ,升級終身會員即…

背景圖處理,這是個好東西記錄一下

背景圖處理 rgba (),前3個是三原色,第四個參數是透明度轉載于:https://www.cnblogs.com/ChineseLiao/p/7479207.html

python使用GUI(圖形用戶界面)

打開后: File→New File(Ctrl N) 轉載于:https://www.cnblogs.com/ly123456/p/6269859.html

Altium Designer(AD24)新工程復用設計文件圖文教程及視頻演示

🏡《專欄目錄》 目錄 1,概述2,復用方法一視頻演示2.1,創建工程2.2,復用設計文件 3,復用方法二視頻演示4,總結 歡迎點擊瀏覽更多高清視頻演示 1,概述 本文簡述使用AD軟件復用設計文件…

兩點定標法_一種兩點校正紅外熱像儀的非均勻性的模塊及方法

一種兩點校正紅外熱像儀的非均勻性的模塊及方法【技術領域】[0001] 本發明屬于紅外熱成像系統的非均勻性校正領域,特別是一種兩點校正紅外熱像 儀的非均勻性的模塊及方法。【背景技術】[0002] 在過去的幾十年中,紅外探測器件的元數不斷增加,由…

leetcode851. 喧鬧和富有(dfs)

在一組 N 個人(編號為 0, 1, 2, …, N-1)中,每個人都有不同數目的錢,以及不同程度的安靜(quietness)。 為了方便起見,我們將編號為 x 的人簡稱為 "person x "。 如果能夠肯定 perso…

如何選擇正確的容器編排以及如何進行部署

by Michael Douglass邁克爾道格拉斯(Michael Douglass) 如何選擇正確的容器編排以及如何進行部署 (How to choose the right container orchestration and how to deploy it) Running server processes inside containers is here to stay. If your environment is small with…

Oracle 學習筆記(三)

oracle 表查詢 oracle 表基本查詢 在此,基于 scott 用戶存在的 emp,dept 表演示學習。 emp 雇員表 clerk 員工 salesman 銷售 manager 經理 analyst 分析師 president 總裁 mgr 上級的編號 hiredate 入職時間 sal 工資 comm 獎金 deptno 部…

html meta標簽使用總結(轉)

之前學習前端中&#xff0c;對meta標簽的了解僅僅只是這一句。 <meta charset"UTF-8"> 但是打開任意的網站&#xff0c;其head標簽內都有一列的meta標簽。比如我博客的。 但是自己卻很不熟悉&#xff0c;于是把meta標簽加入了寒假學習計劃的最前方。 簡介 在查…

bzoj 4009 接水果 整體二分

Description 先給出一些盤子, 用路徑x-y表示, 有權值 再有Q個詢問, 表示水果, 用路徑x-y表示 如果盤子是水果的子路徑, 可以接住 對于每個水果, 輸出可以接住它的盤子的第k小權 Solution 對于x-lca-y的盤子&#xff0c;水果一定一個在x子樹&#xff0c;一個在y子樹 對于x-lca的…

離散元 python_剛開始學習離散元軟件Yade,有什么建議?

用Yade-DEM 做過博士期間的部分工作&#xff0c;也是從毫無所知到算是入門&#xff0c;分享一點我的學習過程&#xff0c;為那些剛接觸Yade的同學提供些許參考&#xff0c;希望對大家有幫助。0. Yade 簡介Yade 是一個用于離散元分析的開源平臺&#xff0c;是法國Lab 3SR-Grenob…

leetcode529. 掃雷游戲(dfs)

讓我們一起來玩掃雷游戲&#xff01; 給定一個代表游戲板的二維字符矩陣。 ‘M’ 代表一個未挖出的地雷&#xff0c;‘E’ 代表一個未挖出的空方塊&#xff0c;‘B’ 代表沒有相鄰&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右&#xff0c;和所有4個對角線&#…

redhat6 刪除mysql_Red Hat enterprise linux 6卸載默認安裝的 mysql

因為Red Hat enterprise linux 6 自帶了一個mysql&#xff0c;所以當你安裝新的mysql時&#xff0c;就會提示錯誤如&#xff1a;error&#xff1a;Failed dependencies&#xff1a;MySQL conflicts with mysql-5.1.47-4.el6.i686rmp -qa mysql 可以看到安裝的mysql于是將自帶的…

swift通知欄推送_如何使用Swift使用推送通知構建食品交付應用

swift通知欄推送by Neo Ighodaro由新Ighodaro 如何使用Swift使用推送通知構建食品交付應用 (How to build a food delivery app with push notifications using Swift) A basic understanding of Swift and Node.js is needed to follow this tutorial.要學習本教程&#xff0…

Jenkins持續集成實踐之java項目自動化部署

關于Linux安裝Jenkins可以參考我的這篇博文Ubuntu16.04環境安裝jenkins 1.安裝部署插件 進入插件管理&#xff0c;并搜索該插件Deploy to container Plugin進行安裝 &#xff0c;下載地址為&#xff1a;https://wiki.jenkins-ci.org/display/JENKINS/DeployPlugin 2.安裝完后&a…

云計算時代企業內部IT人員的新定位

本文講的是云計算時代企業內部IT人員的新定位&#xff0c;【IT168 云計算頻道】漸漸的云計算熱起來&#xff0c;但是怎么去嚴格定義云計算&#xff0c;還是沒有一個統一的說法&#xff0c;最常用的就是舉例子的方式來說什么是云計算&#xff0c;最常用來打比方的是電力&#xf…

Java 多線程 筆記 轉自http://www.cnblogs.com/lwbqqyumidi/p/3804883.html

多線程作為Java中很重要的一個知識點&#xff0c; 一.線程的生命周期及五種基本狀態 關于Java中線程的生命周期&#xff0c;首先看一下下面這張較為經典的圖&#xff1a; 上圖中基本上囊括了Java中多線程各重要知識點。掌握了上圖中的各知識點&#xff0c;Java中的多線程也就基…

leetcode207. 課程表(dfs/bfs)

你這個學期必須選修 numCourse 門課程&#xff0c;記為 0 到 numCourse-1 。 在選修某些課程之前需要一些先修課程。 例如&#xff0c;想要學習課程 0 &#xff0c;你需要先完成課程 1 &#xff0c;我們用一個匹配來表示他們&#xff1a;[0,1] 給定課程總量以及它們的先決條件…

r.java是什么_R.java文件介紹

http://blog.chinaunix.net/uid-21411227-id-4133828.html注意&#xff1a;R.java文件不能手動修改。1. HelloWorld工程中的R.java文件解析package com.android.hellworld;public final class R {public static final class attr {}public static final class drawable {public…

python qt 拖拽組件使用方法_Python QT組件庫qtwidgets的使用

雖然Qt提供了不少現成的組件&#xff0c;但是在Python中使用PyQt5或PySide2進行圖形界面程序開發的過程&#xff0c;還是免不了要根據自己的需求組合一些小部件以形成新的自定義組件。最近州的先生在寫一個桌面圖形界面的登錄密碼框的過程中&#xff0c;發現了這樣一個小巧的自…