奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

Java多線程介紹

時間:2025-03-24 02:36:52 java語言 我要投稿

關(guān)于Java多線程介紹

  一.線程的生命周期及五種基本狀態(tài)

  關(guān)于Java中線程的生命周期,首先看一下下面這張較為經(jīng)典的圖:

  上圖中基本上囊括了Java中多線程各重要知識點。掌握了上圖中的各知識點,Java中的多線程也就基本上掌握了。主要包括:

  Java線程具有五中基本狀態(tài)

  新建狀態(tài)(New):當(dāng)線程對象對創(chuàng)建后,即進(jìn)入了新建狀態(tài),如:Thread t = new MyThread();

  就緒狀態(tài)(Runnable):當(dāng)調(diào)用線程對象的start()方法(t.start();),線程即進(jìn)入就緒狀態(tài)。處于就緒狀態(tài)的線程,只是說明此線程已經(jīng)做好了準(zhǔn)備,隨時等待CPU調(diào)度執(zhí)行,并不是說執(zhí)行了t.start()此線程立即就會執(zhí)行;

  運行狀態(tài)(Running):當(dāng)CPU開始調(diào)度處于就緒狀態(tài)的線程時,此時線程才得以真正執(zhí)行,即進(jìn)入到運行狀態(tài)。注:就 緒狀態(tài)是進(jìn)入到運行狀態(tài)的唯一入口,也就是說,線程要想進(jìn)入運行狀態(tài)執(zhí)行,首先必須處于就緒狀態(tài)中;

  阻塞狀態(tài)(Blocked):處于運行狀態(tài)中的線程由于某種原因,暫時放棄對CPU的使用權(quán),停止執(zhí)行,此時進(jìn)入阻塞狀態(tài),直到其進(jìn)入到就緒狀態(tài),才 有機會再次被CPU調(diào)用以進(jìn)入到運行狀態(tài)。根據(jù)阻塞產(chǎn)生的原因不同,阻塞狀態(tài)又可以分為三種:

  1.等待阻塞:運行狀態(tài)中的線程執(zhí)行wait()方法,使本線程進(jìn)入到等待阻塞狀態(tài);

  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)。

  死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了run()方法,該線程結(jié)束生命周期。

  二. Java多線程的創(chuàng)建及啟動

  Java中線程的創(chuàng)建常見有如三種基本形式

  1.繼承Thread類,重寫該類的run()方法。

  class MyThread extends Thread { private int i = 0; @Override public void run() { for (i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } }}

  public class ThreadTest { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 30) { Thread myThread1 = new MyThread(); // 創(chuàng)建一個新的線程 myThread1 此線程進(jìn)入新建狀態(tài) Thread myThread2 = new MyThread(); // 創(chuàng)建一個新的線程 myThread2 此線程進(jìn)入新建狀態(tài) myThread1.start(); // 調(diào)用start()方法使得線程進(jìn)入就緒狀態(tài) myThread2.start(); // 調(diào)用start()方法使得線程進(jìn)入就緒狀態(tài) } } }}

  如上所示,繼承Thread類,通過重寫run()方法定義了一個新的線程類MyThread,其中run()方法的方法體代表了線程需要完成的任務(wù),稱之為線程執(zhí)行體。當(dāng)創(chuàng)建此線程類對象時一個新的線程得以創(chuàng)建,并進(jìn)入到線程新建狀態(tài)。通過調(diào)用線程對象引用的start()方法,使得該線程進(jìn)入到就緒狀態(tài),此時此線程并不一定會馬上得以執(zhí)行,這取決于CPU調(diào)度時機。

  2.實現(xiàn)Runnable接口,并重寫該接口的run()方法,該run()方法同樣是線程執(zhí)行體,創(chuàng)建Runnable實現(xiàn)類的實例,并以此實例作為Thread類的target來創(chuàng)建Thread對象,該Thread對象才是真正的線程對象。

  class MyRunnable implements Runnable { private int i = 0; @Override public void run() { for (i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } }}

  public class ThreadTest { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 30) { Runnable myRunnable = new MyRunnable(); // 創(chuàng)建一個Runnable實現(xiàn)類的對象 Thread thread1 = new Thread(myRunnable); // 將myRunnable作為Thread target創(chuàng)建新的線程 Thread thread2 = new Thread(myRunnable); thread1.start(); // 調(diào)用start()方法使得線程進(jìn)入就緒狀態(tài) thread2.start(); } } }}

  相信以上兩種創(chuàng)建新線程的方式大家都很熟悉了,那么Thread和Runnable之間到底是什么關(guān)系呢?我們首先來看一下下面這個例子。

  public class ThreadTest { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 30) { Runnable myRunnable = new MyRunnable(); Thread thread = new MyThread(myRunnable); thread.start(); } } }}class MyRunnable implements Runnable { private int i = 0; @Override public void run() { System.out.println("in MyRunnable run"); for (i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } }}class MyThread extends Thread { private int i = 0; public MyThread(Runnable runnable){ super(runnable); } @Override public void run() { System.out.println("in MyThread run"); for (i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } }}

【Java多線程介紹】相關(guān)文章:

java多線程介紹08-23

Java多線程的用法介紹09-15

java的多線程09-09

java多線程08-31

Java多線程知識點介紹09-05

java語言的多線程08-29

java多線程教程11-03

如何使用java多線程08-23

Java多線程問題總結(jié)10-24

主站蜘蛛池模板: 内乡县| 建平县| 泗阳县| 洛扎县| 赤峰市| 邢台市| 普兰县| 夏河县| 淅川县| 连城县| 陆川县| 横峰县| 兴海县| 曲阳县| 黑龙江省| 香格里拉县| 阿瓦提县| 即墨市| 安乡县| 田东县| 红原县| 蒲城县| 班玛县| 昭平县| 光山县| 汉寿县| 汝阳县| 巨野县| 张家口市| 海伦市| 天祝| 新疆| 五指山市| 株洲市| 基隆市| 渭南市| 澄迈县| 锡林郭勒盟| 滁州市| 固安县| 石河子市|