您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Java中線程的實現方式有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
線程是進程的一個實體,是 CPU 調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程 自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是 它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。
多線程指在單個程序中可以同時運行多個不同的線程執行不同的任務。
多線程編程的目的,就是“最大限度地利用 cpu 資源”,當某一線程的處理不需要占用 cpu 而只和 io 等資源 打交道時,讓需要占用 Cpu 的其他線程有其他機會獲得 cpu 資源。從根本上說,這就是多線程編程的最終 目的。
Thread
Runnable
Callable
繼承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并實現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重寫call方法,實現Callable和實現Runnable類似,但是功能更強大,具體表現在:
可以在任務結束后提供一個返回值,Runnable不行
call方法可以拋出異常,Runnable的run方法不行
可以通過運行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中線程的實現方式有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。