1. 程式人生 > >多執行緒筆記

多執行緒筆記

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中的多執行緒為什麼不安全?

  1. 因為JVM的執行緒是"搶佔式排程" , 當多個執行緒同時爭奪同一個資源時 , 可能會導致資料不同步

總結

實現Runnable介面比繼承Thread類所具有的優勢 :

  1. 避免了Java中的單繼承的侷限性 , 介面可以實現多個 , 類只能繼承一個 ;
  2. 適合於多個相同的程式程式碼的執行緒共享一個資源 ;
  3. 增加了程式的健壯性 , 實現瞭解耦和操作 , 程式碼可以被多個執行緒共享 , 保持了程式碼和執行緒的獨立性 ;
  4. 執行緒池只能放實現了Runnable或者Callable介面類的執行緒 , 不能放繼承了Thread的類 ;