Java的多線程簡(jiǎn)單了解

Java中的多線程

一、進(jìn)程的概念

  • 進(jìn)程:程序的執(zhí)行過(guò)程,它持有資源(共享內(nèi)存、共享文件)和線程

  • 執(zhí)行過(guò)程:代表著動(dòng)態(tài)性

  • 持有:代表著載體

  • 資源:代表內(nèi)存

二、線程的概念

  • 線程:是程序中最小的執(zhí)行單元

  • 一個(gè)進(jìn)程中可以有多個(gè)線程

  • 多個(gè)線程需要通信才能正常工作稱之為線程的交互,交互的方式又分為兩種:互斥(相互搶奪資源)和同步(相互配合)

  • 栗子(好好吃):進(jìn)程可以類比班級(jí),是學(xué)校的一個(gè)單元(windows上的一個(gè)程序);而線程就是班級(jí)里面的學(xué)生,是班級(jí)里面種最小的一個(gè)執(zhí)行單元(線程),而上體育課(執(zhí)行任務(wù)),打籃球的進(jìn)攻雙方互相搶奪籃球的控制權(quán)(互斥:多線程搶奪CPU的控制權(quán)),而攻守雙方中的球員彼此不會(huì)搶奪己方的籃球控制權(quán)(同步:相互配合,不會(huì)想多CPU的控制權(quán),只有等到籃球傳遞到自己的手上才會(huì)進(jìn)行任務(wù))。

三、Java對(duì)線程的支持(創(chuàng)建以及常見方法)

  • 創(chuàng)建方式(4種)

    1. 繼承Thread接口

    2. 實(shí)現(xiàn)Runnable接口

    3. 使用Callable和Future創(chuàng)建線程

    4. 通過(guò)線程池獲?。‥xecutor)

  • Tread的常用方法

image.png
  • 線程的啟動(dòng)

    調(diào)用Thread的start()方法啟動(dòng)。

    一般這里會(huì)出現(xiàn)面試題:run()方法和start()方法的區(qū)別?

    調(diào)用run()方法只是單純的調(diào)用了一個(gè)方法,而start()方法才是線程的正確啟動(dòng)方法。

  • 線程的結(jié)束

    Thread類中有一個(gè)stop()方法,但是!?。。。。∵@個(gè)stop方法并不推薦使用,究其根本是因?yàn)檫@個(gè)方法是Java1.0提供的,不是說(shuō)他出現(xiàn)的早而不用,而是另有其他的原因:因?yàn)樗鼤?huì)讓我們的線程直接結(jié)束,就相當(dāng)于至接拔掉電腦的電源,你都不知道線程執(zhí)行到了什么地方和完成了什么任務(wù),所以并不推薦這種方式來(lái)結(jié)束掉線程。

    正確的結(jié)束方式為:設(shè)置結(jié)束標(biāo)志

  • 線程的同步

    同步鎖、同步方法、同步代碼塊

    常見的面試題:wait()與sleep()的區(qū)別?
    • sleep() 方法是線程類(Thread)的靜態(tài)方法,讓調(diào)用線程進(jìn)入睡眠狀態(tài),讓出執(zhí)行機(jī)會(huì)給其他線程,等到休眠時(shí)間結(jié)束后,線程進(jìn)入就緒狀態(tài)和其他線程一起競(jìng)爭(zhēng)cpu的執(zhí)行時(shí)間。 因?yàn)閟leep() 是static靜態(tài)的方法,他不能改變對(duì)象的機(jī)鎖,當(dāng)一個(gè)synchronized塊中調(diào)用了sleep() 方法,線程雖然進(jìn)入休眠,但是對(duì)象的機(jī)鎖沒(méi)有被釋放,其他線程依然無(wú)法訪問(wèn)這個(gè)對(duì)象。
    • wait()是Object類的方法,當(dāng)一個(gè)線程執(zhí)行到wait方法時(shí),它就進(jìn)入到一個(gè)和該對(duì)象相關(guān)的等待池,同時(shí)釋放對(duì)象的機(jī)鎖,使得其他線程能夠訪問(wèn),可以通過(guò)notify,notifyAll方法來(lái)喚醒等待的線程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對(duì)應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過(guò)程中...
    勝浩_ae28閱讀 5,258評(píng)論 0 23
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。在這之前...
    4ea0af17fd67閱讀 635評(píng)論 2 17
  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對(duì)應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過(guò)程中...
    小徐andorid閱讀 2,993評(píng)論 3 53
  • 單任務(wù) 單任務(wù)的特點(diǎn)是排隊(duì)執(zhí)行,也就是同步,就像再cmd輸入一條命令后,必須等待這條命令執(zhí)行完才可以執(zhí)行下一條命令...
    Steven1997閱讀 1,357評(píng)論 0 6
  • 很久沒(méi)有鍛煉了,今天突然走了10000多步,大腿反應(yīng)還是很大的。不過(guò)與今天的收獲比起來(lái),顯得微不足道。 ...
    B超機(jī)想吃狗肉閱讀 290評(píng)論 0 0

友情鏈接更多精彩內(nèi)容