03.30 java 多線程Thread與Runnable的區別

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

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

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

測試:

[java] view plain copy

  1. package main.uitls;

  2. publicclass Demo {

  3. publicstaticvoid main(String[] arg0){

  4. Mythread m1 = new Mythread();

  5. Mythread m2 = new Mythread();

  6. Mythread m3 = new Mythread();

  7. m1.start();

  8. m2.start();

  9. m3.start();

  10. /*MyRunnable myRunnable =new MyRunnable();

  11. Thread m1 = new Thread(myRunnable);

  12. Thread m2 = new Thread(myRunnable);

  13. Thread m3 = new Thread(myRunnable);

  14. m1.start();

  15. m2.start();

  16. m3.start();*/

  17. }

  18. }

  19. class Mythread extends Thread{

  20. publicint num = 5;

  21. publicvoid run() {

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

  23. if(num>0){

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

  25. }

  26. }

  27. }

  28. }

  29. class MyRunnable implements Runnable{

  30. publicint num = 5;

  31. publicvoid run() {

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

  33. if(num>0){

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

  35. }

  36. }

  37. }

  38. }

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

[html] view plain copy

  1. 當前剩餘票數:5

  2. 當前剩餘票數:4

  3. 當前剩餘票數:3

  4. 當前剩餘票數:5

  5. 當前剩餘票數:2

  6. 當前剩餘票數:5

  7. 當前剩餘票數:1

  8. 當前剩餘票數:4

  9. 當前剩餘票數:3

  10. 當前剩餘票數:2

  11. 當前剩餘票數:4

  12. 當前剩餘票數:1

  13. 當前剩餘票數:3

  14. 當前剩餘票數:2

  15. 當前剩餘票數:1

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

[java] view plain copy

  1. MyRunnable myRunnable =new MyRunnable();

  2. Thread m1 = new Thread(myRunnable);

  3. Thread m2 = new Thread(myRunnable);

  4. Thread m3 = new Thread(myRunnable);

  5. m1.start();

  6. m2.start();

  7. m3.start();

結果為:

[html] view plain copy

  1. 當前剩餘票數:5

  2. 當前剩餘票數:3

  3. 當前剩餘票數:4

  4. 當前剩餘票數:1

  5. 當前剩餘票數:2


分享到:


相關文章: