Thread類是接口Runnable的一個實現類。安全
public class Thread implements Runnable
複製代碼
private native void start0()
複製代碼
native代表這個方法是個原生函數,即這個函數是用C/C++實現的,被編譯成DLL,由Java調用。 native 方法是在註冊是在Thread對象初始化完成的,如圖,靜態塊static裏有個registerNatives方法,該方法會註冊一些本地方法供Thread類使用。bash
start0方法會在JVM 新建一個線程ide
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。源碼分析
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());
}
}
}
}
複製代碼
啓動三個線程spa
TicketRunnableThread ticketRunnableThread = new TicketRunnableThread();
new Thread(ticketRunnableThread).start();
new Thread(ticketRunnableThread).start();
new Thread(ticketRunnableThread).start();
複製代碼
三個線程共同完成了賣票任務,然而三個線程共同執行同一段代碼,會形成線程不安全,能夠經過加鎖解決。線程