Java中的多線程(一)之多線程創建

Java中的多線程是個很複雜的話題,自己也一直感覺有必要寫些博客來梳理這些知識點,所以寫下這篇文章來記錄。

Java線程併發是通過共享內存實現的,理解此模型比較重要,這個會讓我們對多線程的通信有很直觀的理解。

一:線程的創建

Java中線程的創建有兩種方式,即:

1:繼承Thread類     2:實現Runnable接口

看看Java給我們提供的常見api吧

Thread():創建一個新的Thread對象

Thread(Runnable target):根據給定的實現Runnable的對象創建一個新的Thread對象

Thread(Runnable target,String name):如上,並且爲線程指定了名字

我們創建線程的常見方式如下:

	//first method
	Thread t1 = new Thread("Thread name");
	t1.start();
	//second method
	Thread t2 = new Thread(){
		@Override
		public void run() {
			//doSomething
		}
	};
	t2.start();
	//third method
	Thread t3 = new Thread(new Runnable() {
		@Override
		public void run() {
			//dosomething
		}
	},"thread name");
	t3.start();
二:Thread和Runnable的聯繫

  看Java源碼:

public class Thread implements Runnable {
       	  /* Make sure registerNatives is the first thing <clinit> does. */
Thread實現了Runable接口,而Runnable接口中只有一個方法就是public abstract void run();,所以我們任何實現Runnable的類都必須重寫run方法。那麼毫無例外,Thread類也必須重寫run方法,那麼繼續看源碼

       @Override
       public void run() {
       	  if (target != null) {
            target.run();
          }
       }

由上我們可以看出,Thread調用了一個target的run方法,而這個target就是我們傳遞進去的Runnable對象。

       private Runnable target;
       public Thread(Runnable target) {
       	init(null, target, "Thread-" + nextThreadNum(), 0);
       }
       private void init(ThreadGroup g, Runnable target, String name,
          long stackSize) {
	    ......
	    this.target = target;
	    ......
       }

所以Thread(Runnable target)實質上會優先調用target的run方法。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章