一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - Java線程的全方位詳解

Java線程的全方位詳解

2022-02-13 14:33吾日三省賈斯汀 Java教程

Java 給多線程編程提供了內置的支持。 一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務,多線程是多任務的一種特別的形式,但多線程使用了更小的資源開銷

大家好,我是賈斯汀,今天主要聊一聊關于線程的瓜!

先來看一下線程這張圖線程的幾種運行狀態之間運行流程:

Java線程的全方位詳解

看不懂沒關系,慢慢來學習,往下學習來繼續了解一下~

什么是線程?

  • 線程是進程的一部分,是程序執行中的一條執行路線;
  • 進程就是指程序在其自身地址空間的一次執行活動,是程序獨立運行的基本單位;
  • 一個進程可以包含多條線程,一個條線程對應一個進程中的一條執行路線。

Java線程的全方位詳解

線程的幾種創建方式?

主要由四種方式創建線程:

Java線程的全方位詳解

  • 方式1:繼承Thread類,重寫run(),無返回值
  • 方式2:實現Runnable接口,重寫run(),無返回值
  • 方式3:新建FutureTask + 實現Callable接口,重寫call(),有返回值
  • 方式4:通過Executors工具類創建線程池 + 調用submit + 重寫Callable接口,重寫call(),有返回值

具體每一種創建方式說明及代碼實現如下:

?
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
 * 創建Thread線程的四種方式之內部類寫法
 */
public class NewThread {
 
    public static void main(String[] args) throws Exception {
 
        //方式1
        Thread t1 = new Thread(){
            @Override
            public void run() {
                System.out.println("方式1:繼承Thread類并重寫run()方法創建線程,無返回值");
            }
        };
        t1.start();
        Thread.sleep(1000);
 
        //方式2
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("方式2:實現Runnable接口并重寫run()方法創建線程,無返回值");
            }
        });
        t2.start();
        Thread.sleep(1000);
 
        //方式3
        FutureTask<String> ft = new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                String result = "方式3:實現Callable接口并重寫call()方法新建FutureTask對象作為new Thread實例化參數創建線程,有返回值";
                return result;
            }
        });
        Thread t3 = new Thread(ft);
        t3.start();
        System.out.println(ft.get()); //輸出返回值
 
        Thread.sleep(1000);
 
        //方式4
        ExecutorService pool = Executors.newFixedThreadPool(5);
        Future<String> future = pool.submit(new Callable<String>(){
            @Override
            public String call() throws Exception {
                String result = "方式4:通過工具類Executors創建線程池,調用submit新建Future對象并重寫Callable接口重寫call()方法創建線程,有返回值";
                return result;
            }
        });
        pool.shutdown();//關閉線程池
        System.out.println(future.get()); //輸出返回值
    }
}

線程的幾種狀態?

  • 新建(new):通過上面介紹的某種方式新建線程即處于新建狀態;
  • 就緒(Ready):調用線程的start()方法,首先進入就緒狀態,等待獲取CPU時間;
  • 運行(Running):就緒狀態的線程獲取到CPU時間或阻塞狀態的線程恢復都可進入運行狀態;
  • 阻塞(Blocked):運行狀態的線程可能因為IO阻塞或在synchronized同步代碼塊中都可進入阻塞狀態;
  • 死亡(Dead):正常運行的線程執行結束或就緒狀態的線程直接調用stop()方法就會進入死亡狀態;
  • 睡眠(Sleeping):調用sleep方法指定線程睡眠多久,會釋放CPU資源,但不釋放鎖資源,睡眠時間到后會重新進入就緒狀態;
  • 等待(Waiting):調用wait會讓線程短暫的處于等待中,會釋放CPU資源,并且釋放鎖資源,進入就緒狀態。

Java線程的全方位詳解

線程相關的核心方法及作用?

  • start:調用start()方法底層源碼會判斷線程狀態是否是新建狀態,不是則直接拋異常,并且后續會調用一個native本地方法start0,其底層通過JVM來進行調度最后調用run()方法執行;
  • run:調用run()方法,底層會直接進入到重寫的run()方法并執行代碼塊內容;
  • sleep:屬于Thread類的一個native本地static靜態方法,可以在任何地方調用sleep(1000)方法,期間會讓當前線程進入睡眠狀態1秒鐘,并讓出CPU資源,但不釋放鎖資源
  • wait:屬于Object類的一個方法,只能在synchronized同步塊中進行調用wait(1000)方法,期間會讓當前線程進入等待狀態1秒鐘,不僅會讓出CPU時間,還釋放并釋放對象鎖資源
  • yield:跟sleep一樣,也是Thread類的一個native本地static靜態方法,與sleep的最大區別在于Thread.yield()不需要指定暫停時間,并不會阻塞線程,而是進入就緒狀態,短暫的讓出CPU資源,這份CPU資源可能自己會再次獲取到,這個取決于調度器;
  • notify:同wait一樣,也是屬于Object類的一個方法,作用是可以將wait()后等待的線程進行單個喚醒,并進入Read就緒狀態;
  • notifyAll:同notify一樣,也是屬于Object類的一個方法,作用將當前對象上的所有等待線程喚醒,并進入Read就緒狀態;
  • stop:該方法已被廢棄,不建議使用,該方法的作用是直接將線程結束,進入死亡狀態;
  • interrupt:沖斷線程,不保證線程進入死亡、就緒還是繼續運行,不想stop可以直接沖斷一個正在運行的線程。 What's up!不來個點贊支持一下,這手指是金子做的?

到此這篇關于Java線程的全方位詳解的文章就介紹到這了,更多相關Java 線程內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_33414271/article/details/78522235

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 果冻传媒第一二三专区 | 校园全肉高h湿一女多男 | 白丝超短裙被输出娇喘不停小说 | 亚洲国产精品综合福利专区 | 沉沦艳妇杨幂肉体小说 | 国色天香社区视频免费高清在线观看 | www.四虎在线观看 | 日本视频在线观看 | 9自拍视频在线观看 | 五月天国产精品 | 成人性爱视频在线观看 | 国产精品国产精品国产三级普 | 精品国产一区二区三区国产馆 | 女女同性做爰xxoo亲吻 | 国产在线精品香蕉综合网一区 | 亚洲香蕉网久久综合影院3p | 韩国三级理韩国三级理人伦 | 免费视频大全 | 女教师被女同学调教成脚奴 | 魔镜号中文字幕 | 日韩久久精品 | 国产精品日韩欧美在线 | 美人的淫事[纯hh] | 午夜福利理论片高清在线 | 免费我看视频在线观看 | 九九在线免费视频 | 色五月天天 | 久久国产视频网站 | 国产精品一区二区久久不卡 | 91天堂视频| 亚洲国产精品久久精品成人网站 | 青青青手机在线观看 | 精品国产福利在线观看一区 | 美女靠逼免费视频 | 男人的天堂视频在线 | 国产99久久九九精品免费 | 精品国产一区二区三区国产馆 | 40分钟在线观看免费 | 国产做a爰片久久毛片 | 婷婷日韩 | 久久伊人精品青青草原2021 |