2014-04-08 59 views
0

我做一些多任務處理邏輯。Java新線程何時啓動?

我想知道,當一個新的線程是在Java創造?我認爲它只是通過調用thread.start()或其他什麼東西?

實際到位產生新的線程進入由JVM(Java)的內存DVM(安卓)

Java的創作者親切地設計創建線程的方法有兩種:實現接口和擴展類。擴展類是Java從父類繼承方法和變量的方式。在這種情況下,只能擴展或繼承單個父類。在Java中這種限制可以通過實現接口,這是創建線程最常見的方式來克服。 (請注意,繼承的行爲只允許類作爲線程運行,由類開始()執行等)

這意味着只要thread.start()將調用一個新的線程在內存中生成。

回答

1

明確地,是的,它是在Thread.start()方法。然而,這不是唯一的方法,因爲有內部啓動Thread的其他數據結構,但沒有在其上明確發出.start()。這是AsyncTask的情況,其中在.execute()聲明中創建Thread

ThreadPoolExecutor的情況下,不需要.start(),因爲它自己處理。

3

,當你調用線程它創建開始肯定。然而各種庫會打電話,如果你創建一個ThreadPoolExecutor,它會管理自己的線程的線程開始自己,例如。

真的這個問題太廣泛了,您需要深入研究並更具體地詢問您實際需要知道的內容。

+0

感謝蒂姆·B I想知道代新線程的實際的位置在內存JVM或DVM。 –

1

是,Thread.start()是啓動一個線程,線程池管理工作者線程池,它包含了不斷的任務等待得到執行

請訪問

http://blog.jamesdbloom.com/JVMInternals.html隊列

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor

http://howtodoinjava.com/2013/03/12/java-executor-framework-tutorial-and-best-practices/

但是使用Java創建一個線程像這樣做:

Thread thread = new Thread(); 

要啓動線程,你會調用它的start()方法,像這樣:

thread.start(); 

創建Thread的子類並重寫run()方法。 run()方法是在調用start()之後由線程執行的方法。這裏有一個例子:

public class MyThread extends Thread { 

    public void run(){ 
     System.out.println("MyThread running"); 
    } 
    } 

要創建並啓動上述線程,你可以這樣做:

MyThread myThread = new MyThread(); 
    myTread.start(); 

你也可以創建Thread的匿名子類是這樣的:

Thread thread = new Thread(){ 
    public void run(){ 
     System.out.println("Thread Running"); 
    } 
    } 

    thread.start(); 

另一種指定線程應該運行的代碼的方法是創建一個實現java的類。lang.Runnable。 Runnable對象可以由線程執行。 這裏是一個Java可運行例如:

public class MyRunnable implements Runnable { 

    public void run(){ 
     System.out.println("MyRunnable running"); 
    } 
    } 

具有由一個線程執行run()方法,通MyRunnable的實例,以在其構造一個線程。這裏是如何做到這一點:

Thread thread = new Thread(new MyRunnable()); 
    thread.start(); 

匿名實現Runnable的,就像這樣:

Runnable myRunnable = new Runnable(){ 

    public void run(){ 
     System.out.println("Runnable running"); 
    } 
    } 


    Thread thread = new Thread(myRunnable); 
    thread.start(); 
1

我們可以通過擴展Thread類來實現Runnable接口來創建線程。

以下代碼創建線程。

Thread t = new Thread(new Runnable(){ 
@Override 
public void run() { 
} 

});

多線程你可以試試這個教程: http://www.journaldev.com/1079/java-thread-tutorial