新建狀態(tài):使用 new 關(guān)鍵字和 Thread 類或其子類建立一個(gè)線程對(duì)象后,該線程對(duì)象就處于新建狀態(tài)。它保持這個(gè)狀態(tài)直到程序 start() 這個(gè)線程。就緒狀態(tài):當(dāng)線程對(duì)象調(diào)用了start()方法之后,該線程就進(jìn)入就緒狀態(tài)。

創(chuàng)新互聯(lián)建站長(zhǎng)期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鎮(zhèn)遠(yuǎn)企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),鎮(zhèn)遠(yuǎn)網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
繼承Thread類方式:import java.lang.Thread; //用集成Thread類方式實(shí)現(xiàn)多線程。
繼承Thread類創(chuàng)建線程 Thread類本質(zhì)上是實(shí)現(xiàn)了Runnable接口的一個(gè)實(shí)例,代表一個(gè)線程的實(shí)例。啟動(dòng)線程的唯一方法就是通過(guò)Thread類的start()實(shí)例方法。start()方法是一個(gè)native方法,它將啟動(dòng)一個(gè)新線程,并執(zhí)行run()方法。
Java提供了線程類Thread來(lái)創(chuàng)建多線程的程序。其實(shí),創(chuàng)建線程與創(chuàng)建普通的類的對(duì)象的操作是一樣的,而線程就是Thread類或其子類的實(shí)例對(duì)象。每個(gè)Thread對(duì)象描述了一個(gè)單獨(dú)的線程。
繼承Thread,然后生成對(duì)象 用類A實(shí)現(xiàn)runable接口,然后用你實(shí)現(xiàn)runnable的類A,生成Thread對(duì)象 Thread(A對(duì)象);API 上說(shuō)明如下:創(chuàng)建新執(zhí)行線程有兩種方法。一種方法是將類聲明為 Thread 的子類。
Java多線程的創(chuàng)建及啟動(dòng) Java中線程的創(chuàng)建常見(jiàn)有如三種基本形式 繼承Thread類,重寫(xiě)該類的run()方法。
1、線程用到Thread或者Runnable接口(Thread也操作了Runnable接口)繼承了Thread類后需要重載其run方法,在方法里寫(xiě)你需要完成的事情,開(kāi)始線程是調(diào)用其start方法。
2、Java中線程的創(chuàng)建常見(jiàn)有如三種基本形式 繼承Thread類,重寫(xiě)該類的run()方法。
3、wait() 導(dǎo)致當(dāng)前線程等待,直到其他線程調(diào)用此對(duì)象的 notify()方法或 notifyAll()方法前,導(dǎo)致當(dāng)前線程等待,如不調(diào)用此對(duì)象的喚醒則不再執(zhí)行。
4、Java 提供了接口 java.lang.Runnable 來(lái)支持這種方法。方法二:實(shí)現(xiàn) Runnable 接口Runnable接口只有一個(gè)方法run(),我們聲明自己的類實(shí)現(xiàn)Runnable接口并提供這一方法,將我們的線程代碼寫(xiě)入其中,就完成了這一部分的任務(wù)。
5、通常在構(gòu)造器中通過(guò)start()啟動(dòng)線程并不是好主意。這樣做,會(huì)把部分構(gòu)造的對(duì)象暴露給新的線程。如果對(duì)象擁有一個(gè)線程,那么它應(yīng)該提供一個(gè)啟動(dòng)該線程的start()或init()方法,而不是從構(gòu)造器中啟動(dòng)它。
4個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程對(duì)j每次減少1。
所以又打印一次,沒(méi)有問(wèn)題吧。就像你的if(i0&&i=40)一樣,兩個(gè)線程都會(huì)執(zhí)行到。所以你在else里面也要加一個(gè)判斷,讓其中一個(gè)線程來(lái)輸出就行了,或者你可以t0線程輸出前門(mén),t1線程輸出后門(mén)。
而store方法中有兩行代碼,一個(gè)是賬戶值增加,一個(gè)是打印,他們不是原子(雖然在物理學(xué)上已經(jīng)過(guò)時(shí)了)操作,所以不能保證打印的時(shí)候賬戶值是不是已經(jīng)被其他線程修改了。結(jié)果是怎么得來(lái)的?有了以上分析就很easy了。
synchronized (s)的s是synchronized 的參數(shù),synchronized 的參數(shù)可以是任意對(duì)象,我定義了一個(gè)String類型的對(duì)象s,方便看程序而已。但是要注意,s的定義一定要在run方法之外,不然還會(huì)出現(xiàn)負(fù)數(shù)。
java中線程是不精確的,所以線程直接輸出的話兩個(gè)線程執(zhí)行的先后不能通過(guò)程序控制,輸出會(huì)隨機(jī)出現(xiàn)。一下提供一種解決方案:使用延時(shí)實(shí)現(xiàn)交替輸出 先啟動(dòng)一個(gè)線程輸出***,線程攝制休眠時(shí)間(例如:500)。
文章題目:java多線程運(yùn)行代碼 java多線程示例代碼
分享網(wǎng)址:http://chinadenli.net/article47/dsjpihj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容