您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Thread與Runnable在Java中的區別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Thread 和Runnable 關系
Thread類是接口Runnable的一個實現類。
public class Thread implements Runnable
源碼分析
Thread Threa類運行的時候調用start()方法,源代碼如下:
調用start()方法,實際運行的是start0方法,方法聲明如下:
private native void start0()
native表明這個方法是個原生函數,即這個函數是用C/C++實現的,被編譯成DLL,由Java調用。
native 方法是在注冊是在Thread對象初始化完成的,如圖,靜態塊static里有個registerNatives方法,該方法會注冊一些本地方法供Thread類使用。
start0方法會在JVM 新建一個線程
Runnable Runnable 接口只有一個run()方法,完全是線程運行規范。
代碼實例分析
Thread類定義一個賣票的類
public class TicketThread extends Thread { private int ticket = 100000; @Override public void run() { for (int i = 0; i < 100000; i++) { if (ticket > 0) { System.out.println("ticket=" + ticket-- + "," + Thread.currentThread().getName()); } } } }
啟動三個線程
new TicketThread().start(); new TicketThread().start(); new TicketThread().start();
運行發展每個線程獨立執行了賣票的任務,每個線程中票數依次減1。
Runnable接口實現一個賣票的類
public class TicketRunnableThread implements Runnable { private int ticket = 1000; public void run() { for (int i = 0; i < 1000; i++) { if (ticket > 0) { System.out.println("ticket=" + ticket-- + "," + Thread.currentThread().getName()); } } } }
啟動三個線程
TicketRunnableThread ticketRunnableThread = new TicketRunnableThread(); new Thread(ticketRunnableThread).start(); new Thread(ticketRunnableThread).start(); new Thread(ticketRunnableThread).start();
三個線程共同完成了賣票任務,然而三個線程共同執行同一段代碼,會造成線程不安全,可以通過加鎖解決。
使用選擇
實現Runnable接口的同時,還可以繼承其他類,避免Java的單繼承性帶來局限性。
Runnable接口可以實現資源共享,Thread無法完成資源共享。
看完上述內容,你們對Thread與Runnable在Java中的區別是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。