91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中線程的實現方式有哪些

發布時間:2021-07-01 15:15:43 來源:億速云 閱讀:175 作者:Leah 欄目:大數據

今天就跟大家聊聊有關Java中線程的實現方式有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、線程&多線程

線程:

線程是進程的一個實體,是 CPU 調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程 自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是 它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。

多線程:

多線程指在單個程序中可以同時運行多個不同的線程執行不同的任務。

多線程編程的目的,就是“最大限度地利用 cpu 資源”,當某一線程的處理不需要占用 cpu 而只和 io 等資源 打交道時,讓需要占用 Cpu 的其他線程有其他機會獲得 cpu 資源。從根本上說,這就是多線程編程的最終 目的。

二、線程實現的方式

  • Thread

  • Runnable

  • Callable

Thread:

繼承Thread類并重寫run方法。其實Thread是實現Runnable接口來實現線程, class Thread implements Runnable { 。

public class Test {
   public static void main(String[] args) {
       Thread01 thread01 = new Thread01();
       thread01.start();
   }
}
class Thread01 extends Thread {
   @Override
   public void run() {
       System.out.println("線程01執行了。。。");
   }
}

Runnable:

實現Runnable并實現run方法,將Runnable放入到Thread中start即可。

public class Test {
   public static void main(String[] args) {
       Thread thread = new Thread(new Runnable01());
       thread.start();
   }
}

class Runnable01 implements Runnable{
   public void run() {
       System.out.println("Runnable01 running....");
   }
}

第一種方法通過覆蓋Thread中的run方法來實現線程,第二種方法中,通過源碼可以發現,Thread中run方法的代碼為:

public void run() {
   if (target != null) {
       target.run();
   }
}

傳入的Runnable就是target,所以當我們執行 Thread.start() 的時候,其實是執行的Runnable的run方法。

Callable:

實現Callable重寫call方法,實現Callable和實現Runnable類似,但是功能更強大,具體表現在:

  1. 可以在任務結束后提供一個返回值,Runnable不行

  2. call方法可以拋出異常,Runnable的run方法不行

  3. 可以通過運行Callable得到的Fulture對象監聽目標線程調用call方法的結果,得到返回值,(fulture.get(),調用后會阻塞,直到獲取到返回值)

public class Test {
   public static void main(String[] args) throws Exception {
       System.out.println("main的線程:" + Thread.currentThread().getName());
       Callable01 callable01 = new Callable01();
       FutureTask<Integer> ft = new FutureTask<Integer>(callable01);
       Thread thread = new Thread(ft);
       thread.start();
       System.out.println(ft.get()); //獲得線程執行返回結果
   }
}
class Callable01 implements Callable<Integer> {
   public Integer call() throws Exception {
       System.out.println("Callable01的線程:" + Thread.currentThread().getName());
       return 111;
   }
}

將Fulture放入Thread,能想到Fulture應該也實現了Runnable接口:

Java中線程的實現方式有哪些

看完上述內容,你們對Java中線程的實現方式有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绍兴市| 临潭县| 奉贤区| 浠水县| 马山县| 贡嘎县| 正阳县| 焦作市| 自贡市| 德格县| 灌云县| 阳谷县| 张家口市| 万荣县| 四平市| 县级市| 新邵县| 库伦旗| 成武县| 墨脱县| 友谊县| 重庆市| 新源县| 吉安县| 庆云县| 南澳县| 民和| 沁源县| 界首市| 刚察县| 新河县| 汨罗市| 准格尔旗| 洛浦县| 六盘水市| 嘉鱼县| 宁城县| 临夏市| 兴国县| 乌拉特后旗| 张掖市|