1.繼承thread類
public class ThreadTest extends Thread {
public static void main(String[] args) {
ThreadTest tt=new ThreadTest();
Thread tt1=new ThreadTest();
tt.start();
tt1.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<1000;i++){
System.out.println("當前線程是"+Thread.currentThread().getName()+",i="+i);
}
}
}
2.實現runnable方法
package com.xujy.thread;
public class ThreadRun implements Runnable {
public static void main(String[] args) {
ThreadRun tr=new ThreadRun();
Thread th=new Thread(tr);
Thread th1=new Thread(tr);
th.start();
th1.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<1000;i++){
System.out.println("當前線程是"+Thread.currentThread().getName()+",i="+i);
}
}
}
}
3.比較不同
1、當使用繼承的時候,主要是爲了不必重新開發,並且在不必瞭解實現細節的情況下擁有了父類我所需要的特徵。它也有一個很大的缺點,那就是如果我們的類已經從一個類繼承,則無法再繼承 Thread 類,
2、java只能單繼承,因此如果是採用繼承Thread的方法,那麼在以後進行代碼重構的時候可能會遇到問題,因爲你無法繼承別的類了,在其他的方面,兩者之間並沒什麼太大的區別。
3、implement Runnable是面向接口,擴展性等方面比extends Thread好。
4、使用 Runnable 接口來實現多線程使得我們能夠在一個類中包容所有的代碼,有利於封裝,它的缺點在於,我們只能使用一套代碼,若想創建多個線程並使各個線程執行不同的代碼,則仍必須額外創建類,如果這樣的話,在大多數情況下也許還不如直接用多個類分別繼承 Thread 來得緊湊。