多線程入門教程

在java中我們使用多線程的情況 一般就兩種情況.第一種:繼承thread.第二種:實現runnable.

那麼我們先來看看第一種繼承thread的情況:

對於直接繼承Thread的類來說,代碼大致框架如下:

class 類名 extends Thread{

   方法1;

    方法2;

     .........

     public  void run(){


     }

     屬性1;

     屬性2;

     ..........

}

那麼我們先來看一個簡單的例子.代碼如下:

public class DoubleDemo extends Thread{
    private String name;
    public DoubleDemo(String name){
        this.name=name;
    }
    //主方法
    public void run(){
        for(int i=0;i<5;i++){
            System.out.println(name+"運行===>"+i);
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DoubleDemo d1=new DoubleDemo("A");
        DoubleDemo d2=new DoubleDemo("B");
        d1.start();
        d2.start();
    }

}

[輸出結果:]

A運行===>0
B運行===>0
A運行===>1
A運行===>2
B運行===>1
A運行===>3
B運行===>2
B運行===>3
B運行===>4
A運行===>4

因爲需要用到CPU的資源,所以每次的運行結果基本上都不是一樣的.注意:雖然我們在這裏調用的是start()方法,

但是實際上主體作用還是run()方法.

那麼:爲什麼我們不能直接調用run()方法呢?

我的理解是:線程的運行需要本地操作系統的支持.

如果你查看start源代碼的時候你會發現: 有一句調用的是start0().並且這個方法用了native關鍵字.次關鍵字標示調用本地操作系統的函數.因爲多線程的實現

需要本地操作系統的支持.但是start方法重複調用的話,會出現 java.lang.illegalthreadstateException異常

第二種情況 通過實現runnable接口:

大致框架是:

class 類名 implement Runnable{

   方法1;

    方法2;

     .........

     public  void run(){


     }

     屬性1;

     屬性2;

     ..........

}

我們將上面的例子稍微修改一下 如下:

public class MyRunnable implements Runnable{

    private String name;
    public MyRunnable(String name){
        this.name=name;
    }
    
    public void run(){
        for(int i=0;i<5;i++){
            System.out.println(name+"運行======>"+i);
        }
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyRunnable m1=new MyRunnable("線程A");
        Thread t1=new Thread(m1);
        
        MyRunnable m2=new MyRunnable("線程B");
        Thread t2=new Thread(m2);
        
        t1.start();
        t2.start();
    }

}

[運行結果]

線程A運行======>0
線程B運行======>0
線程A運行======>1
線程A運行======>2
線程A運行======>3
線程A運行======>4
線程B運行======>1
線程B運行======>2
線程B運行======>3
線程B運行======>4

關於我們到底選擇哪一個,就要看你的程序設計了.如果一個類繼承Thread 則不適合資源共享.但是如果實現runnable,則很容易實現資源共享. 下一篇我們將深入瞭解.






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章