java實現多線程有兩種方法
1、繼承Thread類
2、實現Runnable接口
1)一般認爲:實現Runnable接口的對象,其着眼點主要含義是:一個計算任務.它代表一個要被其它線程(如:線程池中的線程)執行的任務.着眼點是:交由其它人去完成的一個計算任務. ---對應着:要做的工作
2)一般認爲:從Thread類繼承的含義主要是:一個能執行其它(或自己)的任務的一個線程對象.着眼點是:線程的功能(通過繼承來擴展執行其它計算任務的能力) ---對應着:做工作的工作人員
3)當然:若一個類已有父親,不能再從Thread類繼承,只好實現Runnable接口來達到線程的目的,這是一種選擇了.
這兩種方法的共同點:
不論用哪種方法,都必須用Thread(如果是Thead子類就用它本身)產生線程,然後再調用start()方法。
兩種方法的不同點:繼承Thread類有一個缺點就是單繼承,而實現Runnable接口則彌補了它的缺點,可以實現多繼承
下面用例子來做說明
程序1:
程序的運行結果是:
這是繼承了Thread類,第一種方法產生多個Runnable實例對象,然後用Thread產生多個線程
第二種方法,因爲這個類已經繼承了Thread類,所以就可以直接利用它本身產生多個線程
程序2:
程序運行結果:
賣票----->10
賣票----->9
賣票----->8
賣票----->7
賣票----->6
賣票----->5
賣票----->4
賣票----->3
賣票----->2
賣票----->1
把以下代碼稍稍改動一下:
程序運行結果發生瞭如下變化:
賣票----->7
賣票----->7
賣票----->7
賣票----->4
賣票----->4
賣票----->2
賣票----->1
賣票----->0
賣票----->0
賣票----->0