03.30 java 多線程Thread與Runnable的區別

1.Runnable適合多線程操作同一資源。

2.Runnable接口可以避免java單繼承帶來的侷限

3.Runnable增強代碼健壯性,代碼被多個線程共享

測試:

[java] view plain copy

package main.uitls;

publicclass Demo {

publicstaticvoid main(String[] arg0){

Mythread m1 = new Mythread();

Mythread m2 = new Mythread();

Mythread m3 = new Mythread();

m1.start();

m2.start();

m3.start();

/*MyRunnable myRunnable =new MyRunnable();

Thread m1 = new Thread(myRunnable);

Thread m2 = new Thread(myRunnable);

Thread m3 = new Thread(myRunnable);

m1.start();

m2.start();

m3.start();*/

}

}

class Mythread extends Thread{

publicint num = 5;

publicvoid run() {

for(int i=100;i > 0;i--){

if(num>0){

System.out.println("當前剩餘票數:"+num--);

}

}

}

}

class MyRunnable implements Runnable{

publicint num = 5;

publicvoid run() {

for(int i=100;i > 0;i--){

if(num>0){

System.out.println("當前剩餘票數:"+num--);

}

}

}

}

當使用Thread時,多個線程之間數據沒有共享,返回的結果為(每次運行結果可能不同)

[html] view plain copy

當前剩餘票數:5

當前剩餘票數:4

當前剩餘票數:3

當前剩餘票數:5

當前剩餘票數:2

當前剩餘票數:5

當前剩餘票數:1

當前剩餘票數:4

當前剩餘票數:3

當前剩餘票數:2

當前剩餘票數:4

當前剩餘票數:1

當前剩餘票數:3

當前剩餘票數:2

當前剩餘票數:1

當使用Runnable時縣城之間數據共享:

[java] view plain copy

MyRunnable myRunnable =new MyRunnable();

Thread m1 = new Thread(myRunnable);

Thread m2 = new Thread(myRunnable);

Thread m3 = new Thread(myRunnable);

m1.start();

m2.start();

m3.start();

結果為:

[html] view plain copy

當前剩餘票數:5

當前剩餘票數:3

當前剩餘票數:4

當前剩餘票數:1

當前剩餘票數:2