国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java多線程開發(fā)系列之二:如何創(chuàng)建多線程

2019-11-14 22:59:28
字體:
供稿:網(wǎng)友
java多線程開發(fā)系列之二:如何創(chuàng)建多線程

前文已介紹過多線程的基本知識了,比如什么是多線程,什么又是進(jìn)程,為什么要使用多線程等等。

在了解了軟件開發(fā)中使用多線程的基本常識后,我們今天來聊聊如何簡單的使用多線程。

在Java中創(chuàng)建多線程的方式有兩種:

(1)寫一個子類,這個類要繼承自Thread類,于此同時這個子類必須要重寫Thread類中的run方法(原因我后文中會提到),然后我們就可以用這個類來創(chuàng)建出一個多線程。

(2)仍然是寫一個類,這個類要實現(xiàn)Runnable接口,與(1)相同,在這個實現(xiàn)類中也需要重寫run方法。

這里有一點要注意:C#可以隨意使用任何方法,來作為一個新線程的方法,而java必須通過以上兩種途徑中的任意一種來實現(xiàn)這一個類,然后用這個類來創(chuàng)建一個新線程


使用第一種方法:繼承Thread父類

1、定義一個繼承自Thread類的子類,并且重寫run()方法,run(),這個run方法,就是未來新線程要運行的具體任務(wù)或者叫做功能。

2、實例化(new)出剛才定義的子類

3、運行這個新對象的的start方法。務(wù)必記住是start方法,只有這樣才會啟動一個新的線程。如果是運行run方法,那么仍然是簡單的單線程執(zhí)行

 1 public class FirstThread extends Thread 2 { 3     PRivate int i; 4     public void run() 5     { 6         for(;i<=100;i++) 7         { 8             System.out.println(getName()); 9         }10     }11     public static void main(String[] args)12     {13         for(int i=0;i<100;i++)14         {15             if(i%10==0)16             {17                 new FrirstThread.start();18                 new FrirstThread.start();19             }20         }21     } 22 }

使用第二種方法:通過實現(xiàn)Runnable接口,來開辟新線程

1、定義一個類,這個類需要實現(xiàn)Runnable接口,仍然需要在該類中重寫接口中的run方法,與方法1一樣,這個run方法也是未來的線程執(zhí)行體

2、實例化(new)出剛才定義的類A(防盜連接:本文首發(fā)自王若伊_恩賜解脫http://m.survivalescaperooms.com/jilodream/ )

3、實例化(new)出一個Thread類,并以A作為target,運行start方法

 1 public class SecondThread implements Runnable 2 { 3     private int i; 4     public void run() 5     { 6         for(;i<=100;i++) 7         { 8             System.out.println(Thread.currentThread().getName()); 9         }10     }11     public static void main(String[] args)12     {13         for(int i=0;i<100;i++)14         {15             if(i%10==0)16             {17                 SecondThread st=new SecondThread()18                 new Thread(st,"name1").start();19                 new Thread(st,"name2").start();20             }21         }22     } 23 }


兩種開辟多線程方式的比較

1、在繼承方面:由于java 不允許多重繼承,所以如果存在某個基類的需要繼承情況下,方法1(使用Thread子類)的方式明顯要比方法二(實現(xiàn)Runnable接口的)的方式要麻煩(因為方法2還可以再繼承一個父類)

2、共享數(shù)據(jù)方面:方法2可以直接以新定義的類作為各個線程對象(Thread實例)的target,這樣各個線程對象的target對象可以說是共享的,大家可以共同處理同一份資源(放在target中),而方法一則需要另外再寫方法,或者修改構(gòu)造函數(shù)

3、方法1比方法2要簡單的多,也更容易理解(我是這樣感覺的)。在run方法中,如果需要使用當(dāng)前線程對象的方法(如getName,setName)或字段,方法一可以直接使用(因為它本身就是正在執(zhí)行的線程對象),而方法二則需要使用Thread.CurrentThread()方法來獲取當(dāng)前執(zhí)行的線程對象(因為正在運行這個方法,所以當(dāng)前線程對象即為運行這個方法的線程對象(有點拗口),有點繞的味道),然后調(diào)用當(dāng)前線程對象的方法。

4、無論是哪種方法開辟多線程,都請不要忘記,除了開辟和運行新線程,本身還存在一個正在執(zhí)行的線程(兩個例子中都是Main 線程)

5、無論是哪種方法,如果要使用新線程執(zhí)行方法體,都需要使用start 方法來被動的運行 run,而不能直接運行run方法(此時就是一個簡單的順序結(jié)構(gòu),主線程會等到run方法結(jié)束后,才繼續(xù)開始運行)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安徽省| 阳山县| 庄浪县| 连山| 县级市| 墨竹工卡县| 白河县| 武平县| 辽阳市| 柳江县| 毕节市| 镇坪县| 广东省| 云霄县| 建德市| 南安市| 同心县| 游戏| 平果县| 关岭| 丹东市| 津市市| 盐池县| 辽宁省| 天门市| 中卫市| 青海省| 清原| 喀喇沁旗| 横峰县| 南宁市| 故城县| 前郭尔| 沙洋县| 富顺县| 塔城市| 安庆市| 衡南县| 福贡县| 隆子县| 凉城县|