成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java多線程專題之線程類和接口入門

開發 后端
本節主要講了Thread類和Runnable接口,以及帶大家實際操作了一下,大家可以自己多試試。

前言

大家好,一直以來我都本著用最通俗的話理解核心的知識點, 我認為所有的難點都離不開 「基礎知識」 的鋪墊。目前正在出一個Java多線程專題長期系列教程,從入門到進階, 篇幅會較多, 喜歡的話,給個關注?? ~

適合人群

  • 有一定的Java基礎
  • 想學習或了解多線程開發
  • 想提高自己的同學
  • 「大佬可以繞過 ~」

背景

之前給大家講了一些框架的使用,這些都屬于業務層面的東西,你需要熟練掌握它并在項目中會運用它即可,但這些對自身技術的積累是遠遠不夠的,如果你想要提高自己,對于語言本身你需要花更多的時間去挖掘而不是局限于框架的使用,所以之前為什么跟大家一直強調基礎的重要性,框架可以千變萬化,層出不窮,但是基礎它是不變的,不管是學java還是前端或者是其它語言, 這一點大家還是需要認清的。

接下來的幾期會專門講多線程這一塊,篇幅會較多,耐心看完你一定會有收獲~

情景回顧

上期帶大家學習了什么是進程什么是線程,理解了它們的基本概念,本期正式學習Java多線程開發,本節主要帶大家入門,認識一些常用的類和接口,我們一起來看一下吧~

Thread 類

在JDK中,提供了一個Thread類,我們只需要繼承這個類,就可以實現多線程:

public class ThreadTest {
public static class MyThread extends Thread {
@Override
public void run() {
System.out.println("hello 2");
}
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
// 啟用線程 (不調用是沒法啟動的)
myThread.start();
System.out.println("hello 1");
}
}

最后結果輸出:

hello 1
hello 2

我們可以發現hello2明明在上面運行,為啥最后輸出,因為它啟動的是獨立的線程執行,所以不會造成阻塞,所以調用start的時候,后續代碼會繼續執行,無需等待hello2的結果。

那么我可以調用多次start嗎?這樣是不是可以多開幾個線程,我們試試看:

public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
System.out.println("hello 1");
myThread.start();
}

運行一下:

Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:710)
at com.thread.base.ThreadTest.main(ThreadTest.java:23)

好家伙,直接報錯,那么原因是什么呢?

為什么start()不可以調用多次

首先我們要明白,Java中,線程是不允許啟動兩次的,啟動第二次就會拋出IllegalThreadStateException的異常。那么這個異常為啥拋呢?我們只要找到start方法中拋這個異常的地方不就好了,下面我們看下源碼:

 public synchronized void start() {
/**
* This method is not invoked for the main method thread or "system"
* group threads created/set up by the VM. Any new functionality added
* to this method in the future may have to also be added to the VM.
*
* A zero status value corresponds to state "NEW".
*/
if (threadStatus != 0)
throw new IllegalThreadStateException();
....
}

好家伙,點進去就找到了,說明,每次調用的時候,首先都會判斷 threadStatus 是否為0。這個0代表的是線程NEW狀態,也就是說第二次調用線程可能會處于非NEW狀態。其實這里涉及到線程生命周期的概念了,先不給大家講解, 后邊給大家講,這一節,我們先入門。

Runnable 接口

我們還可以通過實現Runnable接口,來開啟多線程。我們來看一下:

public class RunnableTest {
public static class MyThread implements Runnable {
@Override
public void run() {
System.out.println("hello 2");
}

}

public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
System.out.println("hello 1");
}
}

看下輸出:

hello 1
hello 2

new Thread,其實還有通過java8的特性表達式,還可以這樣使用:

new Thread(() -> {
System.out.println("hello3");
}).start();

這樣也可以開啟一個多線程。

結束語

本期到這里就結束了, 總結一下,本節主要講了Thread類和Runnable接口,以及帶大家實際操作了一下,大家可以自己多試試。

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-05-26 08:31:41

線程Java線程與進程

2009-03-12 10:52:43

Java線程多線程

2022-06-02 11:12:10

CallableFuture

2022-06-15 07:32:35

Lock線程Java

2011-06-13 10:41:17

JAVA

2009-06-29 17:54:10

Java多線程Thread類創建線程

2009-06-29 18:00:05

Java多線程Runnable接口創建線程

2013-05-23 15:59:00

線程池

2023-06-07 13:49:00

多線程編程C#

2021-09-11 15:26:23

Java多線程線程池

2009-06-29 17:49:47

Java多線程

2021-12-26 18:22:30

Java線程多線程

2021-04-08 10:10:46

JavaSimpleDateFList接口

2010-03-15 18:42:52

Java多線程

2023-06-13 13:39:00

多線程異步編程

2010-03-15 17:56:23

Java多線程

2023-06-08 08:21:08

多線程編程線程間通信

2009-12-08 10:07:29

2012-06-05 02:12:55

Java多線程

2011-06-24 11:12:39

Qt 多線程 線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一 | 日韩一级二级片 | 中文字幕一区在线观看视频 | 亚洲乱码一区二区三区在线观看 | 国产又爽又黄的视频 | 免费精品 | 久国久产久精永久网页 | 久久久夜色精品亚洲 | 精品欧美乱码久久久久久1区2区 | 成人免费视频观看视频 | 日本三级日产三级国产三级 | 在线视频国产一区 | 91久色| 午夜免费精品视频 | 亚洲视频免费在线播放 | 999国产精品视频免费 | 91精品观看 | 91在线看 | 成人一区二区三区在线观看 | 在线观看精品 | 国产精品欧美一区二区 | 久久久精品在线 | 日韩日韩日韩日韩日韩日韩日韩 | 国产精品一区二区三区久久久 | 欧美一区免费在线观看 | 99久久日韩精品免费热麻豆美女 | www.日韩在线 | 国产精品亚洲第一区在线暖暖韩国 | 国产精品视频在线观看 | 欧美在线视频观看 | 日韩视频一区二区三区 | 国产精品黄 | 一区二区三区日 | 久久日韩精品一区二区三区 | 国产成人精品a视频 | 国产99久久精品一区二区永久免费 | 久久91| 一级免费毛片 | 亚洲免费片 | 日韩成人免费av | 欧美专区日韩专区 |