java多線程

    在寫一個很小很小的網頁面監控程序的時候須要使用到java的多線程,在網上簡單看了一下,使用了一下,簡單總結一下以備之後使用。 java

java程序的多線程組織有兩種方式:實現Runnable接口繼承Thread多線程

1. 實現Runnable接口spa

// 實現Runnable接口
class MyThreadRunner implements Runnable {
	
	public void run() {
		System.out.println("Thread running!");
	}
	
}
啓動方式:
// 實現Runnable接口方式的線程啓動
MyThreadRunner runner = new MyThreadRunner();
Thread thread = new Thread(runner);
thread.start();

2. 繼承Thread類方式: 線程

// 繼承Thread
class MyThread extends Thread {
	public void run() {
		System.out.println("Thread running!");
	}
}
啓動方式:

// 實現Thread接口方式的線程啓動
MyThread myThread = new MyThread();
myThread.start();
3. 二者的區別與相同點:

    其實從本質上來講,二者都是同樣的。無論使用哪一種方式,能夠看到都須要建立一個Thread對象(或子類對象),而在通過查看Thread源碼,能夠看到其實Thread其實已經實現了Runnable接口,因此咱們能夠大膽的想象一下,線程是這樣子的:在啓動一個新的線程後,線程都會自動的去執行Thread對象中Runnable接口的run方法;繼承Thread類的方式,實際上是重寫Thread類實現的run方法而已;而實現Runnable接口的方式,則是直接替換Thread對象(子對象)中的target屬性(Runnable類型的); code

    相對來講,實現Runnable的話更方便實現多線程間的資源共享,由於建立線程的target屬性指向的是同一個Runnable實現類對象。 對象

Thread類反編源碼片斷: 繼承

public class Thread implements Runnable {
	......
	
    /* What will be run. */
    private Runnable target;
    
	......

    public void run() {
	if (target != null) {
	    target.run();
	}
    }
	......
	
}
線程Demo完整代碼:
package tutorial.example;

public class ThreadDemo {
	public static void main(String[] args) {
		// 實現Runnable接口方式的線程啓動
		MyThreadRunner runner = new MyThreadRunner();
		Thread thread = new Thread(runner);
		thread.start();
		
		// 實現Thread接口方式的線程啓動
		MyThread myThread = new MyThread();
		myThread.start();
	}
}


// 實現Runnable接口
class MyThreadRunner implements Runnable {
	
	public void run() {
		System.out.println("Thread running!");
	}
	
}

// 繼承Thread
class MyThread extends Thread {
	public void run() {
		System.out.println("Thread running!");
	}
}
相關文章
相關標籤/搜索