多執行緒筆記
阿新 • • 發佈:2018-12-21
1. java中多執行緒有哪幾種實現方式 ?
據我所知 , 常見的有三種 (1) 繼承Thread類 , 覆寫 run() 方法 , 在run()方法中寫入要執行的程式碼 , start() 開啟執行緒;
public class ThreadTest01 extends Thread { public static void main(String[] args) { ThreadTest01 th = new ThreadTest01(); //設定執行緒名稱 th.setName("我是執行緒名稱"); //開啟執行緒 th.start(); } @Override public void run() { for (int i = 1; i <= 500; i++) { //Thread.currentThread().getName()獲取執行緒名稱 System.out.println(Thread.currentThread().getName()+":"+i); } } }
(2) 實現Runnable介面, 實現該介面 run()方法 , 在run()方法中寫入要執行的程式碼 , new Thread( 實現類 )物件 , 把介面的實現類當作構造引數放入Thread物件 , start() 開啟執行緒;
public class RunnableTest01 implements Runnable{ public static void main(String[] args) { RunnableTest01 run = new RunnableTest01(); //建立Thread實列物件, 傳入構造引數 Thread th = new Thread(run , "我是執行緒名稱"); //開啟執行緒 th.start(); } /** * 實現run()方法 */ @Override public void run() { for (int i = 1; i <= 100; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } }
2. Java中的多執行緒為什麼不安全?
- 因為JVM的執行緒是"搶佔式排程" , 當多個執行緒同時爭奪同一個資源時 , 可能會導致資料不同步
總結
實現Runnable介面比繼承Thread類所具有的優勢 :
- 避免了Java中的單繼承的侷限性 , 介面可以實現多個 , 類只能繼承一個 ;
- 適合於多個相同的程式程式碼的執行緒共享一個資源 ;
- 增加了程式的健壯性 , 實現瞭解耦和操作 , 程式碼可以被多個執行緒共享 , 保持了程式碼和執行緒的獨立性 ;
- 執行緒池只能放實現了Runnable或者Callable介面類的執行緒 , 不能放繼承了Thread的類 ;