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
閱讀更多 java架構之路 的文章