最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java創(chuàng)建并運(yùn)行線(xiàn)程的方法

 更新時(shí)間:2021年01月08日 10:34:11   作者:無(wú)才的小易  
這篇文章主要介紹了Java創(chuàng)建并運(yùn)行線(xiàn)程的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Java線(xiàn)程類(lèi)也是一個(gè)object類(lèi),它的實(shí)例都繼承自java.lang.Thread或其子類(lèi)。 可以用如下方式用java中創(chuàng)建一個(gè)線(xiàn)程:

Tread thread = new Thread();

執(zhí)行該線(xiàn)程可以調(diào)用該線(xiàn)程的start()方法:

thread.start();

在上面的例子中,我們并沒(méi)有為線(xiàn)程編寫(xiě)運(yùn)行代碼,因此調(diào)用該方法后線(xiàn)程就終止了。

編寫(xiě)線(xiàn)程運(yùn)行時(shí)執(zhí)行的代碼有兩種方式:一種是創(chuàng)建Thread子類(lèi)的一個(gè)實(shí)例并重寫(xiě)run方法,第二種是創(chuàng)建類(lèi)的時(shí)候?qū)崿F(xiàn)Runnable接口。接下來(lái)我們會(huì)具體講解這兩種方法:

創(chuàng)建Thread****的子類(lèi)

創(chuàng)建Thread子類(lèi)的一個(gè)實(shí)例并重寫(xiě)run方法,run方法會(huì)在調(diào)用start()方法之后被執(zhí)行。例子如下:

public class MyThread extends Thread {
 public void run(){
  System.out.println("MyThread running");
 }
 }

可以用如下方式創(chuàng)建并運(yùn)行上述Thread子類(lèi)

MyThread myThread = new MyThread();

myTread.start();

你也可以如下創(chuàng)建一個(gè)Thread的匿名子類(lèi):一旦線(xiàn)程啟動(dòng)后start方法就會(huì)立即返回,而不會(huì)等待到run方法執(zhí)行完畢才返回。就好像run方法是在另外一個(gè)cpu上執(zhí)行一樣。當(dāng)run方法執(zhí)行后,將會(huì)打印出字符串MyThread running。

你也可以如下創(chuàng)建一個(gè)Thread的匿名子類(lèi):

Thread thread = new Thread(){
 public void run(){
 System.out.println("Thread Running");
 }
};
thread.start();

當(dāng)新的線(xiàn)程的run方法執(zhí)行以后,計(jì)算機(jī)將會(huì)打印出字符串”Thread Running”。

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

第二種編寫(xiě)線(xiàn)程執(zhí)行代碼的方式是新建一個(gè)實(shí)現(xiàn)了java.lang.Runnable接口的類(lèi)的實(shí)例,實(shí)例中的方法可以被線(xiàn)程調(diào)用。下面給出例子:

public class MyRunnable implements Runnable {

public void run(){
 System.out.println("MyRunnable running");
  }
}

為了使線(xiàn)程能夠執(zhí)行run()方法,需要在Thread類(lèi)的構(gòu)造函數(shù)中傳入 MyRunnable的實(shí)例對(duì)象。示例如下:

Thread thread = new Thread(new MyRunnable());
thread.start();

當(dāng)線(xiàn)程運(yùn)行時(shí),它將會(huì)調(diào)用實(shí)現(xiàn)了Runnable接口的run方法。上例中將會(huì)打印出”MyRunnable running”。

同樣,也可以創(chuàng)建一個(gè)實(shí)現(xiàn)了Runnable接口的匿名類(lèi),如下所示:

Runnable myRunnable = new Runnable(){
 public void run(){
 System.out.println("Runnable running");
 }
}
Thread thread = new Thread(myRunnable);
thread.start();

創(chuàng)建子類(lèi)還是實(shí)現(xiàn)Runnable接口?

有時(shí)我們要同時(shí)融合實(shí)現(xiàn)Runnable接口和Thread子類(lèi)兩種方式。例如,實(shí)現(xiàn)了Thread子類(lèi)的實(shí)例可以執(zhí)行多個(gè)實(shí)現(xiàn)了Runnable接口的線(xiàn)程。一個(gè)典型的應(yīng)用就是線(xiàn)程池。

對(duì)于這兩種方式哪種好并沒(méi)有一個(gè)確定的答案,它們都能滿(mǎn)足要求。就我個(gè)人意見(jiàn),我更傾向于實(shí)現(xiàn)Runnable接口這種方法。因?yàn)榫€(xiàn)程池可以有效的管理實(shí)現(xiàn)了Runnable接口的線(xiàn)程,如果線(xiàn)程池滿(mǎn)了,新的線(xiàn)程就會(huì)排隊(duì)等候執(zhí)行,直到線(xiàn)程池空閑出來(lái)為止。而如果線(xiàn)程是通過(guò)實(shí)現(xiàn)Thread子類(lèi)實(shí)現(xiàn)的,這將會(huì)復(fù)雜一些。

**常見(jiàn)錯(cuò)誤:調(diào)用run()****方法而非start()**方法

創(chuàng)建并運(yùn)行一個(gè)線(xiàn)程所犯的常見(jiàn)錯(cuò)誤是調(diào)用線(xiàn)程的run()方法而非start()方法,如下所示:

Thread newThread = new Thread(MyRunnable());
newThread.run(); //should be start();

當(dāng)創(chuàng)建一個(gè)線(xiàn)程的時(shí)候,可以給線(xiàn)程起一個(gè)名字。它有助于我們區(qū)分不同的線(xiàn)程。例如:如果有多個(gè)線(xiàn)程寫(xiě)入System.out,我們就能夠通過(guò)線(xiàn)程名容易的找出是哪個(gè)線(xiàn)程正在輸出。例子如下:**

線(xiàn)程名**起初你并不會(huì)感覺(jué)到有什么不妥,因?yàn)閞un()方法的確如你所愿的被調(diào)用了。但是,事實(shí)上,run()方法并非是由剛創(chuàng)建的新線(xiàn)程所執(zhí)行的,而是被創(chuàng)建新線(xiàn)程的當(dāng)前線(xiàn)程所執(zhí)行了。也就是被執(zhí)行上面兩行代碼的線(xiàn)程所執(zhí)行的。想要讓創(chuàng)建的新線(xiàn)程執(zhí)行run()方法,必須調(diào)用新線(xiàn)程的start方法。

MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable, "New Thread");
thread.start();
System.out.println(thread.getName());

需要注意的是,因?yàn)镸yRunnable并非Thread的子類(lèi),所以MyRunnable類(lèi)并沒(méi)有g(shù)etName()方法。可以通過(guò)以下方式得到當(dāng)前線(xiàn)程的引用:

Thread.currentThread();

因此,通過(guò)如下代碼可以得到當(dāng)前線(xiàn)程的名字:

String threadName = Thread.currentThread().getName();

線(xiàn)程代碼舉例:

這里是一個(gè)小小的例子。首先輸出執(zhí)行main()方法線(xiàn)程名字。這個(gè)線(xiàn)程JVM分配的。然后開(kāi)啟10個(gè)線(xiàn)程,命名為1~10。每個(gè)線(xiàn)程輸出自己的名字后就退出。

public class ThreadExample {
 public static void main(String[] args){
 System.out.println(Thread.currentThread().getName());
 for(int i=0; i<10; i++){
  new Thread("" + i){
  public void run(){
  System.out.println("Thread: " + getName() + "running");
  }
  }.start();
  }
 }
}

需要注意的是,盡管啟動(dòng)線(xiàn)程的順序是有序的,但是執(zhí)行的順序并非是有序的。也就是說(shuō),1號(hào)線(xiàn)程并不一定是第一個(gè)將自己名字輸出到控制臺(tái)的線(xiàn)程。這是因?yàn)榫€(xiàn)程是并行執(zhí)行而非順序的。Jvm和操作系統(tǒng)一起決定了線(xiàn)程的執(zhí)行順序,他和線(xiàn)程的啟動(dòng)順序并非一定是一致的。

到此這篇關(guān)于Java創(chuàng)建并運(yùn)行線(xiàn)程的方法的文章就介紹到這了,更多相關(guān)Java創(chuàng)建并運(yùn)行線(xiàn)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java異步調(diào)用Feign接口空指針問(wèn)題解決

    java異步調(diào)用Feign接口空指針問(wèn)題解決

    這篇文章主要為大家介紹了java異步調(diào)用Feign接口空指針問(wèn)題解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • java實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的示例代碼

    java實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用java語(yǔ)言實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • SpringCloud搭建Eureka服務(wù)模塊的過(guò)程

    SpringCloud搭建Eureka服務(wù)模塊的過(guò)程

    Eureka在分布式系統(tǒng)中起到了連接各個(gè)微服務(wù)的紐帶作用,使得服務(wù)之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導(dǎo)讀者完成Eureka服務(wù)模塊的搭建,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢(xún)功能實(shí)現(xiàn)詳解

    SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢(xún)功能實(shí)現(xiàn)詳解

    這篇文章主要介紹了SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢(xún)功能實(shí)現(xiàn)詳解,本文介紹的也是生產(chǎn)者消費(fèi)者的一種實(shí)現(xiàn),生產(chǎn)者不必是一個(gè)始終在執(zhí)行的線(xiàn)程,它可以是一個(gè)接口,接受客戶(hù)端的請(qǐng)求,向隊(duì)列中插入消息,需要的朋友可以參考下
    2023-07-07
  • Java中如何獲取文件的上級(jí)目錄

    Java中如何獲取文件的上級(jí)目錄

    這篇文章主要介紹了Java中如何獲取文件的上級(jí)目錄問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java集合框架Collections原理及用法實(shí)例

    Java集合框架Collections原理及用法實(shí)例

    這篇文章主要介紹了Java集合框架Collections原理及用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • IDEA中如何正確快速打jar包的方式

    IDEA中如何正確快速打jar包的方式

    這篇文章主要介紹了IDEA中如何正確快速打jar包,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java之Maven工程打包jar

    Java之Maven工程打包jar

    Maven打包一般可以生成兩種包一種是可以直接運(yùn)行的包,一種是依賴(lài)包(只是編譯包)。Maven默認(rèn)打包時(shí)jar,如果需要修改其他類(lèi)型,可以修改pom.xml。感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • spring data jpa如何只查詢(xún)實(shí)體部分字段

    spring data jpa如何只查詢(xún)實(shí)體部分字段

    這篇文章主要介紹了spring data jpa如何只查詢(xún)實(shí)體部分字段的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java生成二維碼的實(shí)例代碼

    Java生成二維碼的實(shí)例代碼

    這篇文章主要介紹了Java生成二維碼的實(shí)例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論

松滋市| 仲巴县| 嵊州市| 太谷县| 津市市| 麦盖提县| 宜宾县| 大连市| 两当县| 黄平县| 浦东新区| 阜康市| 友谊县| 毕节市| 新巴尔虎右旗| 平顺县| 象山县| 开江县| 汉源县| 玉树县| 喀什市| 越西县| 阳山县| 武汉市| 建瓯市| 仙游县| 徐汇区| 延吉市| 克东县| 新源县| 平舆县| 额济纳旗| 宁夏| 临沧市| 大关县| 土默特右旗| 宝山区| 松滋市| 海晏县| 广水市| 屯门区|