欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

java語言

java單線程多線程的實(shí)現(xiàn)與方法

時(shí)間:2025-04-26 05:23:09 java語言 我要投稿
  • 相關(guān)推薦

java單線程多線程的實(shí)現(xiàn)與方法

  java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法?

  stop()和suspend()方法為何不推薦使用? java5以前,有如下兩種:第一種:new Thread(){}.start();這表示調(diào)用Thread子類對(duì)象的run方法,new Thread(){}表示一個(gè)Thread的匿名子類的實(shí)例對(duì)象,子類加上run方法后的代碼如下:new Thread(){ public void run(){ } }.start();第二種:new Thread(new Runnable(){}).start();這表示調(diào)用Thread對(duì)象接受的Runnable對(duì)象的run方法,new Runnable(){}表示一個(gè)Runnable的匿名子類的實(shí)例對(duì)象,runnable的子類加上run方法后的代碼如下:new Thread(new Runnable(){ public void run(){ } }).start(); 從java5開始,還有如下一些線程池創(chuàng)建多線程的方式:ExecutorService pool = Executors.newFixedThreadPool(3) for(int i=0;i<10;i++){ pool.execute(new Runable(){public void run(){}}); } Executors.newCachedThreadPool().execute(new Runable(){public void run(){}});Executors.newSingleThreadExecutor().execute(new Runable(){public void run(){}});前兩種實(shí)現(xiàn)方法,分別使用new Thread()和new Thread(runnable)形式,第一種直接調(diào)用thread的run方法,所以,我們往往使用Thread子類,即new SubThread()。第二種調(diào)用runnable的run方法。后兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 用synchronized關(guān)鍵字修飾同步方法 反對(duì)使用stop(),是因?yàn)樗话踩。它?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)停下來,但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復(fù)運(yùn)行。對(duì)任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個(gè)標(biāo)志,指出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。

  java中線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系

  一個(gè)程序中可以有多條執(zhí)行線索同時(shí)執(zhí)行,一個(gè)線程就是程序中的一條執(zhí)行線索,每個(gè)線程上都關(guān)聯(lián)有要執(zhí)行的代碼,即可以有多段程序代碼同時(shí)運(yùn)行,每個(gè)程序至少都有一個(gè)線程,即main方法執(zhí)行的那個(gè)線程。如果只是一個(gè)cpu,它怎么能夠同時(shí)執(zhí)行多段程序呢?這是從宏觀上來看的,cpu一會(huì)執(zhí)行a線索,一會(huì)執(zhí)行b線索,切換時(shí)間很快,給人的感覺是a,b在同時(shí)執(zhí)行,好比大家在同一個(gè)辦公室上網(wǎng),只有一條鏈接到外部網(wǎng)線,其實(shí),這條網(wǎng)線一會(huì)為a傳數(shù)據(jù),一會(huì)為b傳數(shù)據(jù),由于切換時(shí)間很短暫,所以,大家感覺都在同時(shí)上網(wǎng)。 狀態(tài):就緒,運(yùn)行,synchronize阻塞,wait和sleep掛起,結(jié)束。wait必須在synchronized內(nèi)部調(diào)用。

  調(diào)用線程的start方法后線程進(jìn)入就緒狀態(tài),線程調(diào)度系統(tǒng)將就緒狀態(tài)的線程轉(zhuǎn)為運(yùn)行狀態(tài),遇到synchronized語句時(shí),由運(yùn)行狀態(tài)轉(zhuǎn)為阻塞,當(dāng)synchronized獲得鎖后,由阻塞轉(zhuǎn)為運(yùn)行,在這種情況可以調(diào)用wait方法轉(zhuǎn)為掛起狀態(tài),當(dāng)線程關(guān)聯(lián)的代碼執(zhí)行完后,線程變?yōu)榻Y(jié)束狀態(tài)。

  當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法? 分幾種情況:1.其他方法前是否加了synchronized關(guān)鍵字,如果沒加,則能。2.如果這個(gè)方法內(nèi)部調(diào)用了wait,則可以進(jìn)入其他synchronized方法。3.如果其他個(gè)方法都加了synchronized關(guān)鍵字,并且內(nèi)部沒有調(diào)用wait,則不能。4.如果其他方法是static,它用的同步鎖是當(dāng)前類的字節(jié)碼,與非靜態(tài)的方法不能同步,因?yàn)榉庆o態(tài)的方法用的是this。

  java中多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法?

  多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。 sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。 notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。 Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。

【java單線程多線程的實(shí)現(xiàn)與方法】相關(guān)文章:

Java實(shí)現(xiàn)多線程的方法11-10

PHP多線程的實(shí)現(xiàn)方法09-06

PHP實(shí)現(xiàn)多線程的方法09-01

PHP實(shí)現(xiàn)多線程的方法08-02

Java多線程通信方法09-03

PHP實(shí)現(xiàn)多線程的方法技巧08-16

java的多線程09-09

java多線程08-31

PHP實(shí)現(xiàn)多線程方法兩個(gè)11-04