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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程的创建

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程的创建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

進程:就是正在運行的程序 ?(一個進程可以有多個線程),分配內存讓應用程序能夠運行。

Windows系統號稱多任務(可以同時運行多個應用程序)

? 宏觀上看:Windows確實運行了多個程序

? 圍觀上看:cpu快速做了切換操作,快速執行任務

線程:線程就是在一個進程中負責代碼的執行,就是一個進程中的執行路徑

java程序在運行的時候,java虛擬機會幫我們創建一個主線程來執行代碼,主線程主要負責main里面的代碼

一個java程序里面,至少有兩個線程,一個是主線程,主要負責main方法的執行,另外一個是垃圾回收器線程,主要負責垃圾回收

多線程:在一個進程中,多個線程同時執行不同的任務,(就是單核cpu在做快速的切換,多個線程執行任務)

多線程的好處:

? ? ?1.可以解決一個進程中同事執行多個任務的問題

? ? ?2.提高資源的利用率

多線程的弊端:

? ? ?1.增加cpu的負擔,不是線程越多越好

? ? ?2.降低了一個進程中線程的執行

? ? ?3.容易引發線程安全問題

? ? ?4.容易出現死鎖

java中創建線程有兩種方式:

? ? 方式一: Thread (線程類)

? ? ? ? ? ? ? ? ?1.需要定義一個類來繼承Thread類

? ? ? ? ? ? ? ? ?2.重寫Thread類中的run方法,把自定義線程的任務代碼寫在run方法中,每一個線程都有自己的任務代碼,java虛擬機創建的主線程的任務代碼就是main方法,自定義的線程的任務代碼就寫下run方法中,自定義的線程就需要來執行run方法中的代碼

? ? ? ? ? ? ? ? ?3.創建Thread的子類,并且調用start方法開啟線程

? ? ? ? ? ? ? ? ?注意點:一旦線程開啟了,會默認執行線程對象中的run方法,但是千萬不要自己直接調用run方法,如果直接調用run方法,就和普通的方法沒有區別

線程的生命周期:

? ? ? ? 創建線程(new子線程類)——>等待運行狀態(只有cpu的等待資格,沒有執行)——>運行狀態(具備cpu的執行權,具備cpu的等待權)

?——>結束

線程如果執行sleep或者wait方法,那么這個時候線程會處于阻塞狀態,如果是sleep方法,如果超過了睡眠時間線程會立馬進入等待運行狀態,如果是wait,需要通過其他的線程來喚醒

線程常用的方法:

? ? ?Thread (String name)初始化線程名字

? ? ? getName() ? ? ? ? ? ? ? 返回線程的名字

? ? ? setName(String name)設置線程對象名字

? ? ? sleep() ? ? ? ? ? ? ? ? ? ? ? 線程睡眠指定毫秒數

? ? ? getPriority ? ? ? ? ? ? ? ? ? ? 獲取主線程的優先級,默認線程的優先級是5,

? ? ? setPriority(int newPriority)設置線程的優先級,雖然設置了線程的優先級,但是具體的實現取決于底層的操作系統的實現(最大的優先級是10,最小的優先級是1,一般默認是5)

? ? ? ?currentThread()返回cpu正在執行的線程對象

出現了線程安全問題,數據操作不安全

? ? ?java給線程枷鎖:?

? ? ? ? 方式一:同步代碼塊

? ? ? ? ?所對象可以是人任意一個java中的對象 ? ? ?java中的任意一個對象,都會有一個對象的狀態,,就可以通過對象的狀態來作為鎖的一個標識符,statue ?= ?0 ,表示鎖是關閉的 ?statue ?= ?1,表示鎖打開的

? ? ? ? ? ?synchronized(鎖對象){

? ? ? ? ? ??

? ? ? ? ? ?}

? ? ? ? 同步代碼塊的使用注意點:

? ? ? ? 1.任意一個對象都可以做鎖對象

? ? ? ? 2.如果你在同步代碼塊中調用了sleep方法,不會釋放鎖對象

? ? ? ? 3.只有真正的存在線程安全的時候才需要使用同步代碼塊的方法,否則會降低執行效率

? ? ? ? 4.多線程操作鎖對象必須是唯一的,否則無效

出現線程安全問題根本原因:

? ? ? ? 1.存在兩個或兩個以上的線程,并且線程之間共享看一個資源

? ? ? ? 2.多個語句操作共享資源

方式二:同步函數,用關鍵字synchronized 修飾函數:

? ? ? ? ? ? 同步函數有鎖方法,

? ? ? ? ? ? 同步函數注意點:

? ? ? ? ? ? ? ? 1.如果是一個非靜態的函數,同步函數的鎖對象就是調用方法的對象(this對象),如果是一個靜態函數同步函數的鎖對象,是當前函數所屬類的字節碼(class 對象)

? ? ? ? ? ? ? ? 2.同步函數的鎖對象固定,不能夠自己來指定

? ? ? ? ? ? ? ? 3.同步函數是同步整個函數的代碼。

推薦使用:同步代碼塊

? ?原因:

? ? 1.同步代碼塊的鎖對象可以由我任意指定,同步函數是固定的

? ? 2.同步代碼塊可以控制同步的范圍,同步函數必須是整個函數的所有代碼都被同步

代碼同步是可以解決線程安全問題,但是如果使用不當會導致線程死鎖問題

?A線程等B線程 B有要等A線程,兩個人就等到一起了 ?或造成死鎖的

線程的定義方式二:

? ? ?1. 定義一個類實現Runable接口,接口就會提供一個run方法

? ? ?2.實現Runbale接口的run方法,將線程中的任務寫在run方法中

? ? ?3.創建RUnbale接口的實現類對象

? ? ?4.創建一個Thread對象,并把Runable實現類的創建的對象做為參數

? ? ?5.調用Thread對象的start方法開啟線程

問題: ?為什么要將Runable接口實現類的對象做為參數傳遞?

? ? ? ?為了讓對象中的run方法能夠在線程中的run方法中執行,也就是能夠將對象中的run方法做為線程中的任務來執行

線程的通訊:一個線程完成自己的任務;去通知另外一個線程完成另外一個任務

wait();等待 ?如果線程執行了wait方法,那么該線程就會處于一個等待狀態,等待狀態的線程必須要通過其他線程來調用

? ? ? ? ? ? ? notify()方法來喚醒

notify();喚醒 隨機喚醒一個

notifyAll();喚醒所有的等待

? ?1.wait方法和notify方法是屬性object對象

? ?2.wait方法和notify方法必須在同步線程中執行

? ?3.wait方法和notify方法必須有所對象來調用

?

轉載于:https://www.cnblogs.com/2016yjl/p/6126492.html

總結

以上是生活随笔為你收集整理的线程的创建的全部內容,希望文章能夠幫你解決所遇到的問題。

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