亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

總結(jié)Java中線程的狀態(tài)及多線程的實現(xiàn)方式

 更新時間:2016年07月04日 08:56:02   作者:skywangkw  
Java中可以通過Thread類和Runnable接口來創(chuàng)建多個線程,線程擁有五種狀態(tài),下面我們就來簡單總結(jié)Java中線程的狀態(tài)及多線程的實現(xiàn)方式:

線程的狀態(tài)
線程狀態(tài)圖:

20167484827701.jpg (700×480)

說明:
線程共包括以下5種狀態(tài)。
1. 新建狀態(tài)(New) : 線程對象被創(chuàng)建后,就進(jìn)入了新建狀態(tài)。例如,Thread thread = new Thread()。
2. 就緒狀態(tài)(Runnable): 也被稱為“可執(zhí)行狀態(tài)”。線程對象被創(chuàng)建后,其它線程調(diào)用了該對象的start()方法,從而來啟動該線程。例如,thread.start()。處于就緒狀態(tài)的線程,隨時可能被CPU調(diào)度執(zhí)行。
3. 運行狀態(tài)(Running) : 線程獲取CPU權(quán)限進(jìn)行執(zhí)行。需要注意的是,線程只能從就緒狀態(tài)進(jìn)入到運行狀態(tài)。
4. 阻塞狀態(tài)(Blocked) : 阻塞狀態(tài)是線程因為某種原因放棄CPU使用權(quán),暫時停止運行。直到線程進(jìn)入就緒狀態(tài),才有機會轉(zhuǎn)到運行狀態(tài)。阻塞的情況分三種:
(1) 等待阻塞 -- 通過調(diào)用線程的wait()方法,讓線程等待某工作的完成。
(2) 同步阻塞 -- 線程在獲取synchronized同步鎖失敗(因為鎖被其它線程所占用),它會進(jìn)入同步阻塞狀態(tài)。
(3) 其他阻塞 -- 通過調(diào)用線程的sleep()或join()或發(fā)出了I/O請求時,線程會進(jìn)入到阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉(zhuǎn)入就緒狀態(tài)。
5. 死亡狀態(tài)(Dead) : 線程執(zhí)行完了或者因異常退出了run()方法,該線程結(jié)束生命周期。
這5種狀態(tài)涉及到的內(nèi)容包括Object類, Thread和synchronized關(guān)鍵字。這些內(nèi)容我們會在后面的章節(jié)中逐個進(jìn)行學(xué)習(xí)。
Object類,定義了wait(), notify(), notifyAll()等休眠/喚醒函數(shù)。
Thread類,定義了一些列的線程操作函數(shù)。例如,sleep()休眠函數(shù), interrupt()中斷函數(shù), getName()獲取線程名稱等。
synchronized,是關(guān)鍵字;它區(qū)分為synchronized代碼塊和synchronized方法。synchronized的作用是讓線程獲取對象的同步鎖。
在后面詳細(xì)介紹wait(),notify()等方法時,我們會分析為什么“wait(), notify()等方法要定義在Object類,而不是Thread類中”。

實現(xiàn)多線程的兩種方式:Thread和Runnable
Runnable 是一個接口,該接口中只包含了一個run()方法。它的定義如下:

public interface Runnable {
  public abstract void run();
}

Runnable的作用,實現(xiàn)多線程。我們可以定義一個類A實現(xiàn)Runnable接口;然后,通過new Thread(new A())等方式新建線程。
Thread 是一個類。Thread本身就實現(xiàn)了Runnable接口。它的聲明如下:
public class Thread implements Runnable {}
Thread的作用,實現(xiàn)多線程。

Thread和Runnable的異同點:
Thread 和 Runnable 的相同點:都是“多線程的實現(xiàn)方式”。
Thread 和 Runnable 的不同點:
Thread 是類,而Runnable是接口;Thread本身是實現(xiàn)了Runnable接口的類。我們知道“一個類只能有一個父類,但是卻能實現(xiàn)多個接口”,因此Runnable具有更好的擴(kuò)展性。
此外,Runnable還可以用于“資源的共享”。即,多個線程都是基于某一個Runnable對象建立的,它們會共享Runnable對象上的資源。
通常,建議通過“Runnable”實現(xiàn)多線程!
Thread和Runnable的多線程示例
1.Thread的多線程示例
下面通過示例更好的理解Thread和Runnable,借鑒網(wǎng)上一個例子比較具有說服性的例子。// ThreadTest.java 源碼

class MyThread extends Thread{
  private int ticket=10; 
  public void run(){
    for(int i=0;i<20;i++){ 
      if(this.ticket>0){
        System.out.println(this.getName()+" 賣票:ticket"+this.ticket--);
      }
    }
  } 
};

public class ThreadTest { 
  public static void main(String[] args) { 
    // 啟動3個線程t1,t2,t3;每個線程各賣10張票!
    MyThread t1=new MyThread();
    MyThread t2=new MyThread();
    MyThread t3=new MyThread();
    t1.start();
    t2.start();
    t3.start();
  } 
} 

運行結(jié)果:

Thread-0 賣票:ticket10
Thread-1 賣票:ticket10
Thread-2 賣票:ticket10
Thread-1 賣票:ticket9
Thread-0 賣票:ticket9
Thread-1 賣票:ticket8
Thread-2 賣票:ticket9
Thread-1 賣票:ticket7
Thread-0 賣票:ticket8
Thread-1 賣票:ticket6
Thread-2 賣票:ticket8
Thread-1 賣票:ticket5
Thread-0 賣票:ticket7
Thread-1 賣票:ticket4
Thread-2 賣票:ticket7
Thread-1 賣票:ticket3
Thread-0 賣票:ticket6
Thread-1 賣票:ticket2
Thread-2 賣票:ticket6
Thread-2 賣票:ticket5
Thread-2 賣票:ticket4
Thread-1 賣票:ticket1
Thread-0 賣票:ticket5
Thread-2 賣票:ticket3
Thread-0 賣票:ticket4
Thread-2 賣票:ticket2
Thread-0 賣票:ticket3
Thread-2 賣票:ticket1
Thread-0 賣票:ticket2
Thread-0 賣票:ticket1

結(jié)果說明:
(1) MyThread繼承于Thread,它是自定義個線程。每個MyThread都會賣出10張票。
(2) 主線程main創(chuàng)建并啟動3個MyThread子線程。每個子線程都各自賣出了10張票。

2.Runnable的多線程示例
下面,我們對上面的程序進(jìn)行修改。通過Runnable實現(xiàn)一個接口,從而實現(xiàn)多線程。

// RunnableTest.java 源碼
class MyThread implements Runnable{ 
  private int ticket=10; 
  public void run(){
    for(int i=0;i<20;i++){ 
      if(this.ticket>0){
        System.out.println(Thread.currentThread().getName()+" 賣票:ticket"+this.ticket--);
      }
    }
  } 
}; 

public class RunnableTest { 
  public static void main(String[] args) { 
    MyThread mt=new MyThread();

    // 啟動3個線程t1,t2,t3(它們共用一個Runnable對象),這3個線程一共賣10張票!
    Thread t1=new Thread(mt);
    Thread t2=new Thread(mt);
    Thread t3=new Thread(mt);
    t1.start();
    t2.start();
    t3.start();
  } 
}

運行結(jié)果:

Thread-0 賣票:ticket10
Thread-2 賣票:ticket8
Thread-1 賣票:ticket9
Thread-2 賣票:ticket6
Thread-0 賣票:ticket7
Thread-2 賣票:ticket4
Thread-1 賣票:ticket5
Thread-2 賣票:ticket2
Thread-0 賣票:ticket3
Thread-1 賣票:ticket1

結(jié)果說明:
(1) 和上面“MyThread繼承于Thread”不同;這里的MyThread實現(xiàn)了Thread接口。
(2) 主線程main創(chuàng)建并啟動3個子線程,而且這3個子線程都是基于“mt這個Runnable對象”而創(chuàng)建的。運行結(jié)果是這3個子線程一共賣出了10張票。這說明它們是共享了MyThread接口的。

相關(guān)文章

  • JavaScript 與 Java 區(qū)別介紹  學(xué)java怎么樣

    JavaScript 與 Java 區(qū)別介紹 學(xué)java怎么樣

    JavaScript 是一種嵌入式腳本文件,直接插入網(wǎng)頁,有瀏覽器一邊解釋一邊執(zhí)行。而java 語言不一樣,他必須在JAVA虛擬機上運行。而且事先需要進(jìn)行編譯。接下來腳本之家小編給大家揭曉js與java區(qū)別,感興趣的朋友一起看看吧
    2016-09-09
  • Spring中@Autowired和@Qualifier注解的3個知識點小結(jié)

    Spring中@Autowired和@Qualifier注解的3個知識點小結(jié)

    這篇文章主要介紹了Spring中@Autowired和@Qualifier注解的3個知識點小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany

    使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany

    這篇文章主要介紹了使用JPA雙向多對多關(guān)聯(lián)關(guān)系@ManyToMany,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 在dos窗口中編譯和運行java文件的方法

    在dos窗口中編譯和運行java文件的方法

    這篇文章主要介紹了在dos窗口中編譯和運行java文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • MyBatis-Plus雪花算法實現(xiàn)源碼解讀

    MyBatis-Plus雪花算法實現(xiàn)源碼解讀

    雪花算法是一種用于生成唯一標(biāo)識符(ID)的分布式算法,雪花算法的設(shè)計目標(biāo)是在分布式系統(tǒng)中生成全局唯一的ID,同時保證ID的有序性和趨勢遞增,這篇文章主要介紹了MyBatis-Plus雪花算法實現(xiàn)源碼解析,需要的朋友可以參考下
    2023-12-12
  • spring整合redis消息監(jiān)聽通知使用的實現(xiàn)示例

    spring整合redis消息監(jiān)聽通知使用的實現(xiàn)示例

    在電商系統(tǒng)中,秒殺,搶購,紅包優(yōu)惠卷等操作,一般都會設(shè)置時間限制,本文主要介紹了spring整合redis消息監(jiān)聽通知使用,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • IDEA 打開java文件對應(yīng)的class路徑的操作步驟

    IDEA 打開java文件對應(yīng)的class路徑的操作步驟

    這篇文章主要介紹了IDEA 打開java文件對應(yīng)的class路徑的操作步驟,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Netty分布式高性能工具類FastThreadLocal和Recycler分析

    Netty分布式高性能工具類FastThreadLocal和Recycler分析

    這篇文章主要為大家介紹了Netty分布式高性能工具類FastThreadLocal和Recycler分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java實現(xiàn)四則混合運算代碼示例

    Java實現(xiàn)四則混合運算代碼示例

    這篇文章主要介紹了Java實現(xiàn)四則混合運算代碼示例,文中展示了詳細(xì)代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • java基于jcifs.smb實現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器

    java基于jcifs.smb實現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器

    這篇文章主要介紹了java基于jcifs.smb實現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論