Java多執行緒2 執行緒的建立

2021-08-19 17:08:05 字數 1918 閱讀 1241

上一講中我們講了什麼是執行緒,這一講我們細細討論一下關於執行緒的那些事。

先看看執行緒的狀態轉換圖。

1.首先執行緒被建立出來。

2.進入就緒佇列中等待cpu分配時間片(這裡的時間片指的是cpu允許執行緒執行的最大時間),若在規定時間內未執行完成,則執行緒繼續進入就緒佇列等待cpu分配時間片。

3.執行緒進入執行狀態,若沒有執行緒占用鎖,則執行緒拿到鎖以後對資源進行處理,然後執行緒執行結束並銷毀執行緒,但是若在執行在這過程中有其他執行緒先行一步拿到了鎖,則執行緒進入等待佇列中等待,等待執行緒釋放鎖,並將執行緒從等待對列中喚醒,此時執行緒進入就緒佇列中繼續等待cpu重新分配時間片

上面我們提到了鎖,那麼什麼是鎖呢,在此之前我們先談一下執行緒的安全性問題,若執行緒在執行過程中所操作的資源被另乙個執行緒所修改,我們就說這種情況是執行緒不安全的。就像你在網咖打遊戲,玩得正嗨,突然網管告訴你,你現在不能上了,別人要玩你這台電腦,你是不是會有想打人的衝動,

因此為了保證執行緒的安全性我們需要對執行緒加鎖,既保證執行緒必須等待其他執行緒釋放鎖以後,才能繼續執行。

1.多執行緒環境(廢話)

2.存在共享資源(也就是這個資源,所有執行緒都可以操作)

3.對共享資源的操作屬於非原子性操作(例如 i++、++i這種)

大家不理解的可能是第三點,非原子性操作,什麼是非原子性操作呢,即是對乙個資源的操作不可以拆分比如像 int x;int i=1;像x=i++這種操作就是非原子性的,可以分成兩部分執行可以,x=i;i=i+1;

public class demo1 extends thread 

@override

public void run() catch (interruptedexception e)

}}public static void main(string args)

}

public class demo2 implements runnable 

}public static void main(string args)

}

public class demo3 

}).start();

}}

public class demo4 implements callable

@override

public integer call() throws exception

}

public class demo5 

});}

threadpool.shutdown();

}}

第一種和第二種大家都很常見啦,他們的區別在於乙個是繼承,乙個是實現某個介面,相比之下第二種類和類的耦合性更低,更靈活,更容易擴充套件

第三種是通過匿名內部類的方式建立執行緒

重點講一下第二種和第四種的區別

共同點:兩者都是實現的介面

不同點是:第二種不能夠丟擲異常,且沒有返回值,第三種能丟擲異常且存在返回值

第五種,就是我們使用執行緒池建立執行緒的方式,使用執行緒池可以減少執行緒建立和銷毀以及執行緒上下文切換帶來的開銷問題。

在以後的部落格中會重點講述 callable介面和執行緒池的一些問題的,盡請期待!!

這篇部落格主要講了執行緒的生命週期以及執行緒的常見建立,還簡單談了一下執行緒的安全性問題,這三個話題是面試中經常被問到的,希望引起大家重視!!!

最後送自己一句話也是送各位朋友的一句話,今天你是誰不重要,重要的是你以後是誰,雖然現在大家看起來都差不多,但是兩年、五年後差距就慢慢出來了,學習這種事情就在於積累,你可能學歷不高,專業不對口,但你只要肯努力,這一切都不是問題,希望大家都能有所收穫,那麼我寫這篇部落格的意義就有了,最後感謝大家百忙中抽出時間來看我寫的部落格,本人能力有限,可能有些東西描述不太恰當,希望大家多多諒解!!!

Java建立多執行緒

到目前為止,我們僅用到兩個執行緒 主線程和乙個子執行緒。然而,你的程式可以建立所需的更多執行緒。例如,下面的程式建立了三個子執行緒 create multiple threads.class newthread implements runnable this is the entry point ...

Java建立多執行緒

繼承 thread 方式建立子執行緒 1.建立乙個繼承thread的子類 2.重寫thread類的run 方法,實現子執行緒要完成的功能 3.在主線程類中建立乙個子執行緒類的物件 4.呼叫子執行緒類的start 方法,啟動此子執行緒 實際上start 方法是呼叫了該類的run 方法 package ...

Java多執行緒 建立

一,繼承thread類建立執行緒類 定義thread子類,重寫該類的run 方法,run 方法代表了執行緒需要完成的任務 建立thread子類例項,即執行緒物件 呼叫執行緒物件的start 方法啟動該執行緒 public class firstthread extends thread public...