java多線程有幾種實現方法,都是什么?


 轉自: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產生多個線程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM