国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 創建線程的方法總結

java 創建線程的方法總結

2020-08-22 10:47Java之家 Java教程

這篇文章主要介紹了java 創建線程的方法總結的相關資料,需要的朋友可以參考下

java 創建線程

Java提供了線程類Thread來創建多線程的程序。其實,創建線程與創建普通的類的對象的操作是一樣的,而線程就是Thread類或其子類的實例對象。每個Thread對象描述了一個單獨的線程。要產生一個線程,有兩種方法:

◆需要從Java.lang.Thread類派生一個新的線程類,重載它的run()方法;
◆實現Runnalbe接口,重載Runnalbe接口中的run()方法。

為什么Java要提供兩種方法來創建線程呢?它們都有哪些區別?相比而言,哪一種方法更好呢?

在Java中,類僅支持單繼承,也就是說,當定義一個新的類的時候,它只能擴展一個外部類.這樣,如果創建自定義線程類的時候是通過擴展 Thread類的方法來實現的,那么這個自定義類就不能再去擴展其他的類,也就無法實現更加復雜的功能。因此,如果自定義類必須擴展其他的類,那么就可以使用實現Runnable接口的方法來定義該類為線程類,這樣就可以避免Java單繼承所帶來的局限性。

還有一點最重要的就是使用實現Runnable接口的方式創建的線程可以處理同一資源,從而實現資源的共享.

(1)通過擴展Thread類來創建多線程

假設一個影院有三個售票口,分別用于向兒童、成人和老人售票。影院為每個窗口放有100張電影票,分別是兒童票、成人票和老人票。三個窗口需要同時賣票,而現在只有一個售票員,這個售票員就相當于一個CPU,三個窗口就相當于三個線程。通過程序來看一看是如何創建這三個線程的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MutliThreadDemo {
  public static void main(String [] args){
    MutliThread m1=new MutliThread("Window 1");
    MutliThread m2=new MutliThread("Window 2");
    MutliThread m3=new MutliThread("Window 3");
    m1.start();
    m2.start();
    m3.start();
  }
}
class MutliThread extends Thread{
  private int ticket=100;//每個線程都擁有100張票
  MutliThread(String name){
    super(name);//調用父類帶參數的構造方法
  }
  public void run(){
    while(ticket>0){
      System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
    }
  }
}

  程序中定義一個線程類,它擴展了Thread類。利用擴展的線程類在MutliThreadDemo類的主方法中創建了三個線程對象,并通過start()方法分別將它們啟動。

從結果可以看到,每個線程分別對應100張電影票,之間并無任何關系,這就說明每個線程之間是平等的,沒有優先級關系,因此都有機會得到CPU的處理。但是結果顯示這三個線程并不是依次交替執行,而是在三個線程同時被執行的情況下,有的線程被分配時間片的機會多,票被提前賣完,而有的線程被分配時間片的機會比較少,票遲一些賣完。

可見,利用擴展Thread類創建的多個線程,雖然執行的是相同的代碼,但彼此相互獨立,且各自擁有自己的資源,互不干擾

(2)通過實現Runnable接口來創建多線程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class MutliThreadDemo2 {
  public static void main(String [] args){
    MutliThread m1=new MutliThread("Window 1");
    MutliThread m2=new MutliThread("Window 2");
    MutliThread m3=new MutliThread("Window 3");
    Thread t1=new Thread(m1);
    Thread t2=new Thread(m2);
    Thread t3=new Thread(m3);
    t1.start();
    t2.start();
    t3.start();
  }
}
class MutliThread implements Runnable{
  private int ticket=100;//每個線程都擁有100張票
  private String name;
  MutliThread(String name){
    this.name=name;
  }
  public void run(){
    while(ticket>0){
      System.out.println(ticket--+" is saled by "+name);
    }
  }
}

由于這三個線程也是彼此獨立,各自擁有自己的資源,即100張電影票,因此程序輸出的結果和(1)結果大同小異。均是各自線程對自己的100張票進行單獨的處理,互不影響。

可見,只要現實的情況要求保證新建線程彼此相互獨立,各自擁有資源,且互不干擾,采用哪個方式來創建多線程都是可以的。因為這兩種方式創建的多線程程序能夠實現相同的功能。

由于這三個線程也是彼此獨立,各自擁有自己的資源,即100張電影票,因此程序輸出的結果和例4.2.1的結果大同小異。均是各自線程對自己的100張票進行單獨的處理,互不影響。

可見,只要現實的情況要求保證新建線程彼此相互獨立,各自擁有資源,且互不干擾,采用哪個方式來創建多線程都是可以的。因為這兩種方式創建的多線程程序能夠實現相同的功能。

(3)通過實現Runnable接口來實現線程間的資源共享

 現實中也存在這樣的情況,比如模擬一個火車站的售票系統,假如當日從A地發往B地的火車票只有100張,且允許所有窗口賣這100張票,那么每一個窗口也相當于一個線程,但是這時和前面的例子不同之處就在于所有線程處理的資源是同一個資源,即100張車票。如果還用前面的方式來創建線程顯然是無法實現的,這種情況該怎樣處理呢?看下面這個程序,程序代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MutliThreadDemo3 {
  public static void main(String [] args){
    MutliThread m=new MutliThread();
    Thread t1=new Thread(m,"Window 1");
    Thread t2=new Thread(m,"Window 2");
    Thread t3=new Thread(m,"Window 3");
    t1.start();
    t2.start();
    t3.start();
  }
}
class MutliThread implements Runnable{
  private int ticket=100;//每個線程都擁有100張票
  public void run(){
    while(ticket>0){
      System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
    }
  }
}

 結果正如前面分析的那樣,程序在內存中僅創建了一個資源,而新建的三個線程都是基于訪問這同一資源的,并且由于每個線程上所運行的是相同的代碼,因此它們執行的功能也是相同的。

可見,如果現實問題中要求必須創建多個線程來執行同一任務,而且這多個線程之間還將共享同一個資源,那么就可以使用實現Runnable接口的方式來創建多線程程序。而這一功能通過擴展Thread類是無法實現的,讀者想想看,為什么?

實現Runnable接口相對于擴展Thread類來說,具有無可比擬的優勢。這種方式不僅有利于程序的健壯性,使代碼能夠被多個線程共享,而且代碼和數據資源相對獨立,從而特別適合多個具有相同代碼的線程去處理同一資源的情況。這樣一來,線程、代碼和數據資源三者有效分離,很好地體現了面向對象程序設計的思想。因此,幾乎所有的多線程程序都是通過實現Runnable接口的方式來完成的。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/qq_35101189/article/details/59080557

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美视频二区 | 国产精选一区二区三区不卡催乳 | 国产视频久久 | 一本一本久久a久久精品综合妖精 | 亚洲小视频网站 | 超碰人人操| 在线观看国产视频 | 在线中文av| 91在线精品一区二区 | 日美毛片 | 毛片在线视频 | 日韩国产在线 | 亚洲精品日韩综合观看成人91 | 在线免费观看毛片 | 亚洲精品久久久久久久久久久 | 波多野结衣一二三四区 | 欧美一级免费高清 | 精品国产乱码久久久久久久软件 | 毛片在线视频 | 欧美国产另类 | 亚洲一区二区中文字幕 | 免费啪啪网站 | 私人毛片免费高清视频 | 狠狠干美女 | 久草视频国产 | 成人在线精品 | 不卡视频在线 | 精品天堂 | 久久99精品久久久久久琪琪 | 欧美一区亚洲一区 | 亚洲中字幕| 日韩欧美视频 | 国产亚洲精品久久久久久久久 | 日韩欧美国产一区二区三区 | 成人a毛片| 成人久久久久久久 | 亚洲精品在线看 | 久久成人一区二区 | 视频二区| 日本高清不卡视频 | 日韩中文字幕在线播放 |