標籤:java 線程
/* 進程:是一個正在執行中的程式 每一個進程執行都有執行順序,該順序是一個執行路徑,或叫控制單元線程:就是進程中一個獨立的控制單元 線程在控制著進程的執行一個進程至少包含一個線程Java VM 啟動時會有個進程java.exe該進程中至少有一個線程複製java程式的執行,這個線程啟動並執行代碼存在於main方法中,該線程稱之為主線程JVM啟動不止一個線程,還有複製記憶體回收機制的線程建立線程:(1)繼承Thread類;複寫run方法;建立對象,調用start方法 (2)實現Runnable介面,複寫run方法,建立線程對象,傳遞Runnable子類對象給Thread類建構函式 */package pack;public class Main { public static void sys(Object obj) { System.out.println(obj); } public static void main(String[] args) { //method1(); //method2(); //繼承Thread方法建立線程,執行個體:4視窗賣票 method3();//實現Runnable方法建立線程,執行個體:4視窗賣票 } public static void method1() { Demo d1 = new Demo("one---"); //建立一個線程 Demo d2 = new Demo("two---"); //建立一個線程 d1.start(); d2.start(); for(int i=0;i<20;i++) sys("main run"); } public static void method2() { Ticket t1 = new Ticket(); Ticket t2 = new Ticket(); Ticket t3 = new Ticket(); Ticket t4 = new Ticket(); t1.start(); t2.start(); t3.start(); t4.start(); } public static void method3() { TicketDemo t = new TicketDemo(); Thread t1 = new Thread(t); Thread t2 = new Thread(t); Thread t3 = new Thread(t); Thread t4 = new Thread(t); t1.start(); t2.start(); t3.start(); t4.start(); }}class Demo extends Thread { Demo(String name) { super(name); //父類定義了getName方法,實現自訂線程名稱,預設為Thread0,1 } public void run() { for(int i=0;i<20;i++) //Main.sys(this.getName()+"demo run"); //上下兩句無差別,currentThread擷取當前線程對象,即this Main.sys(Thread.currentThread().getName()+"demo run"); }}class Ticket extends Thread { static int tickets = 200; //一共200張票,一定要static,4視窗公用200張 public void run() { while(true) { if(tickets>0) Main.sys(this.getName()+"---"+tickets--); } }}class TicketDemo implements Runnable { int tickets = 100; public void run() { while(true) { if(tickets>0) Main.sys(Thread.currentThread().getName()+"---"+tickets--); } } }
java建立線程兩種方法