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方法。


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