在線程的Tread對象上調用start()方法,而不是run()或者別的方法。java
在調用Start方法以前,線程出於新狀態中,新狀態是指有一個Thread對象!但尚未一個真正的線程。多線程
在調用start以後發生了一系列複雜的事情框架
啓動新的執行線程(具備新的調用棧)this
該線程重新狀態轉移到可運行狀態spa
當該線程得到機會執行時,其目標run()方法將運行操作系統
在java中要想實現多線程,有兩種手段,一種是繼續Thread類,另一種是實現Runable接口。線程
對於直接繼承Thread的類來講,代碼大體框架是:code
class 類名 extends Thread{ 方法1; 方法2; … public void run(){ // other code… } 屬性1; 屬性2; … }
class hello extends Thread { public hello() { } public hello(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "運行 " + i); } } public static void main(String[] args) { hello h1=new hello("A"); hello h2=new hello("B"); h1.start(); h2.start(); } private String name; }
線程的運行須要本地操做系統的支持。因此須要使用start()而不是直接使用run()。對象
經過實現Runnable接口:blog
class 類名 implements Runnable{ 方法1; 方法2; … public void run(){ // other code… } 屬性1; 屬性2; … }
class hello implements Runnable { public hello() { } public hello(String name) { this.name = name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(name + "運行 " + i); } } public static void main(String[] args) { hello h1=new hello("線程A"); Thread demo= new Thread(h1); hello h2=new hello("線程B"); Thread demo1=new Thread(h2); demo.start(); demo1.start(); } private String name; }
【可能的運行結果】:
線程A運行 0
線程B運行 0
線程B運行 1
線程B運行 2
線程B運行 3
線程B運行 4
線程A運行 1
線程A運行 2
線程A運行 3
線程A運行 4
儘可能去實現Runnable接口