java多執行緒初識4

2021-09-12 14:52:07 字數 1803 閱讀 5301

程序的概念

程序:官方的語言是計算機中的程式,關於某資料集合上的一次執行活動。使系統進行資源分配和排程的基本單位單位,是作業系統的基本單位,是作業系統結構的基礎。在現在的執行緒設計的計算機結構中,程序是執行緒的容器,程式是指令資料及組織形式的描述,程序是程式的實體,但是總的來說 程序是執行緒的容器。在平常我們也會說執行緒是輕量級的程序,是程式執行的最小單位。使用多執行緒而不是用多程序進行併發設計的原因執行緒間的切換與排程的成本遠小於程序

執行緒的生命週期

執行緒 狀態分為 new(新建立的),runnable(執行中),blocked(同步塊阻塞),waiting(等待無限時間的等待),timed_waiting(等待有限的時間 ),terminated(結束) 六種

執行緒的生命週期

執行緒的建立

thread thread =new thread();

thread.start();

//在這裡啟動後 會找到我們的run方法 去執行

終止執行緒

使用thread.stop 該方法停止執行緒。但是該方法會直接終止執行緒,並且將立即釋放這個執行緒所持有的鎖,而這些鎖是用來維持物件的唯一性的。如果資料寫入到一半 鎖時候後,另外乙個執行緒 就會讀取到該物件,但是這就讀取到了乙個不一致的物件這樣就會造成程式出現問題。

stop終止執行緒導致資料不一致

從圖中我們可知 物件有兩個屬性 分別為id 和name , 條件為當id和name 相等 時 物件是一致的,否則表示物件出錯。 我們的寫入執行緒總是把 id和name 寫成相同的值。 然後當我們在寫執行緒把id寫入到物件中的時候 ,突然執行stop 操作,那麼該物件的id就會變成1 而name仍然為別的數值,這樣就處於不一致的情況,寫執行緒在這個時候把鎖釋放後,讀執行緒爭取到鎖,開始讀取資料,這樣就讀取到了錯誤資料。 **如下

public class stopthreadunsafe 

public void setid(int id)

public string getname()

public void setname(string name)

public user()

public user(int id, string name)

@override

public string tostring()

}public static class changeobjectthread extends thread catch (exception e)

user.setname(string.valueof(v));

}thread.yield(); //相當於睡眠,不過 只是 讓同優先順序別的執行緒有執行的機會 。 並且不能指定 暫停多長時間}}

程式顯示結果

顯示的結果不一致,就是讀鎖 讀到內容不一樣。

多執行緒初識

多執行緒cpu 程式 指令集合 程序 程式執行過程 ctrl alt delete 執行緒 指令執行最小單位 執行緒安全 慢 同步 非執行緒安全 執行緒不安全 快 非同步 繼承方式實現多執行緒 執行緒幾種狀態 生命週期 建立狀態 就緒狀態 執行狀態 死亡狀態 掛起狀態 執行緒鎖 互斥鎖 lock i...

多執行緒初識

先了解什麼是應用程式,應用程式就是類似qq,360可執行的應用程式,在乙個應用程式中,都會有程序。什麼是程序,程序中有多個不同的執行路徑,多個執行緒的集合。程序是執行中的程式。什麼是執行緒,乙個執行順序,乙個執行流程,執行路徑。每個執行緒互不影響,因為都在自己獨立執行。總結 程序就是執行的程式,它是...

Java多執行緒 4 執行緒間通訊

有這麼幾個方法,它們就定義在大家都非常熟悉的object類中,但是大家卻從來沒有呼叫過,並且也不知道是做什麼的,今天就由我帶著你們熟悉一下下面的這三個方法。它們都是定義在object類中的final方法,並且只能在synchronized上下文中呼叫。如果你現在還不明白,沒關係,下面我會用乙個 生產...