初識線程

? ?記得初學java那會,對于線程完全是處于懵逼的狀態,腦子里對線程完全沒有什么概念,也想象不出它是個什么東西。當時開發也沒見怎么用,但心里總是有疙瘩,不把它弄明白心里總是不舒服,所以,最近找了一本java線程方面的書籍《java多線程編程核心技術》,作者是高洪巖,書中對每個知識點都配有詳細代碼示例(推薦大家把每個示例都敲一下),通過運行代碼來理解多線程編程中常見的問題以及關鍵字的作用,對于我這樣的小白在合適不過了。下面就以這篇文章開始,記錄一下我對線程的理解和感悟吧。


? ? 平常接觸線程是比較少的,可能對于進程的更加熟悉一點。記得小時候玩游戲,游戲經常卡住不動了,最常用的操作就是,ctrl+alt+delete,打開任務管理器,找到它的進程,結束進程,然后重新打開游戲。為什么結束了游戲的進程,整個游戲就關閉了呢? 這樣我們就不難想象,進程到底是什么東西了。在操作系統中,一個進程就代表了一個應用程序,是操作系統對程序操作的基本單元。那線程又是什么東西呢,和進程有什么關系呢?還是用我們最熟悉的場景,打開QQ聊天。整個QQ程序就是一個進程,和他人聊天時,我們可以發送文件,發送表情,厘米秀等等。這些操作都是一個個單獨的任務,我們可以同時進行,而且這些操作都是建立在QQ這個進程之上來完成的,其中每一個任務都可以看做是個一個線程。

? ? 線程是建立在進程之上的,像上面的例子,發送文件,表情,厘米秀等多個線程任務,可以共享QQ這個進程里面的資源。

現在我們明白了線程是個什么東西,在開始多線程編程之前,我覺得需要搞明白下面兩個問題。

1.有多線程就有單線程,兩者之間的區別是什么?

? 單線程,也叫單任務,即多個任務在執行的時候,必須按照順序執行。多線程,即多個任務 ? 同時執行(線程切換時間很短,感覺像是同時進行),cpu在空閑時間會執行別的線程。

2.我們為什么需要多線程?多線程的優勢在哪?什么是同步和異步?

比如任務A,任務B? ? ,A要從服務器獲取數據,并返回數據,需要8秒完成。B給某一變量賦值,需要1秒鐘。如果A任務先執行,在單線程下,B要想執行,必須等待A執行完后,才能執行。也就是說,A在等待數據的時候,cpu在空閑的這段時間內,并不能執行B任務,必須等到A執行完,才能執行B任務。這種方式也叫同步。而多線程的情況下,cpu在A等待數據的這段時間內,可以切換到B線程,讓其執行。這樣就大大提升了cpu的效率。程序的效率也就加快了很多。這種方式也叫異步。這也是我們為什么要使用多線程的原因。

多線程并不是高枕無憂的,在開發中會遇到很多的問題,臟讀,死鎖等等,在初識線程中就不做記錄了,下一章,開始記錄線程方面的具體知識和感悟。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,161評論 0 23
  • Object C中創建線程的方法是什么?如果在主線程中執行代碼,方法是什么?如果想延時執行代碼、方法又是什么? 1...
    AlanGe閱讀 1,777評論 0 17
  • NSArray*array1_=@[@"張鐵林",@"張國立",@"張國榮",@"張藝謀",@"張惠妹"]; NS...
    Sherry宇閱讀 444評論 0 2
  • 老同學發消息給我,問:今年的同學聚會要不要去參加? 我問:什么時候的事兒? 他說,同學群這幾天都在討論,你不參與討...
    乾樂閱讀 279評論 0 0
  • another瓊閱讀 320評論 0 0