轉自:http://www.cnblogs.com/liujichang/p/3150387.html
多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方法有兩種,分別是synchronized,wait與notify
先看一下java線程運行時各個階段的運行狀態
java實現多線程有兩種方法
1、繼承Thread類
2、實現Runnable接口
這兩種方法的共同點:
不論用哪種方法,都必須用Thread(如果是Thead子類就用它本身)產生線程,然后再調用start()方法。
兩種方法的不同點:
1、繼承Thread類有一個缺點就是單繼承,而實現Runnable接口則彌補了它的缺點,可以實現多繼承
2、繼承Thread類必須如果產生Runnable實例對象,就必須產生多個Runnable實例對象,然后再用Thread產生多個線程;而實現Runnable接口,只需要建立一個實現這個類的實例,然后用這一個實例對象產生多個線程。即實現了資源的共享性
基於以上兩點所以建議用第二種方法
1 package cn.itcast.demo1; 2 3 public class MyThread extends Thread { 4 private String name; 5 public MyThread(String name){ 6 this.name = name; 7 } 8 //如果要使用多線程,則必須有一個方法的主體 9 public void run(){ 10 //打印輸出 11 for(int i = 0;i < 10; i++){ 12 System.out.println(this.name + "----->運行"); 13 } 14 } 15 16 }
1 package cn.itcast.demo1; 2 3 public class Demo5 { 4 public static void main(String[] args) { 5 Runnable r1 = new MyThread("線程一"); 6 Runnable r2 = new MyThread("線程二"); 7 Runnable r3 = new MyThread("線程三"); 8 9 Thread t1 = new Thread(r1); 10 Thread t2 = new Thread(r2); 11 Thread t3 = new Thread(r3); 12 13 t1.start(); 14 t2.start(); 15 t3.start(); 16 17 } 18 19 20 }
1 package cn.itcast.demo1; 2 3 public class Demo6 { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 MyThread mt1 = new MyThread("線程A"); 8 MyThread mt2 = new MyThread("線程B"); 9 MyThread mt3 = new MyThread("線程C"); 10 11 mt1.start(); 12 mt2.start(); 13 mt3.start(); 14 15 } 16 17 }
這是繼承了Thread類,第一種方法產生多個Runnable實例對象,然后用Thread產生多個線程
第二種方法,因為這個類已經繼承了Thread類,所以就可以直接利用它本身產生多個線程
程序2:
1 package cn.itcast.demo1; 2 3 public class MyThread1 implements Runnable { 4 private int ticket = 10; 5 6 @Override 7 public void run() { 8 // TODO Auto-generated method stub 9 for(int i = 0; i < 500;i++){ 10 if(this.ticket > 0){ 11 System.out.println("賣票------》" + (this.ticket--)); 12 } 13 } 14 15 } 16 17 }
1 package cn.itcast.demo1; 2 3 public class Demo7 { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 MyThread1 mt = new MyThread1(); 8 Thread t1 = new Thread(mt); 9 Thread t2 = new Thread(mt); 10 Thread t3 = new Thread(mt); 11 12 t1.start(); 13 t2.start(); 14 t3.start(); 15 16 17 } 18 19 }
這個程序是實現Runnable了,產生一類的實例對象,然后用Thread產生多個線程。