2011-03-22 122 views
0

我是Java的新手,想知道我是否可以按照以下方式創建線程。在Java中創建線程

需要的Java代碼:

Class MyClass { 

    Myclass(){ 
     Statement1;//Create a thread1 to call a function 
     Statement2;//Create a thread2 to call a function 
     Statement3;//Create a thread3 to call a function 
    } 
} 

是否有可能創建一個類似上面的代碼線程?

回答

1

呼應GregInYEG,你應該檢查出的教程,但是可以簡單的解釋如下:

您需要創建或者繼承Thread或實現Runnable對象類。在這個類中,創建(實際上是重載)一個名爲「run」的無效方法。在這個方法裏面,你放置了代碼,你希望這個線程在分叉之後執行。如果你願意,它可以簡單地調用另一個函數。然後,當你想產生一個這種類型的線程時,創建這些對象中的一個,並調用這個對象的「start」(不是run!)方法。例如newThread.start();

調用「開始」而不是「運行」是很重要的,因爲運行調用將像調用其他任何方法一樣簡單地調用方法,而不會分叉新線程。

儘管如此,請務必詳細閱讀並且還有許多重要的併發性方面,尤其是鎖定共享資源的方面。

3

Java Concurrency tutorialdefining and starting threads上包含一頁。您可能需要在併發教程中與其他頁面一起閱讀它。

+0

尤其是部分「高級別的併發對象使用這兩種方法「可能是有價值的。通常較高級別的對象更易於使用。 – 2011-03-22 21:30:35

+0

不能完全理解他們中的任何一個。創建一個空的runnable類並嘗試從不同的類調用2個不同的函數。 Eclipse甚至不允許我寫這個類 – 2011-03-22 21:45:33

0

是的,這是可能的。您希望將您的邏輯用於Runnable實施中的每個語句,然後將每個構建的Runnable傳遞給Thread的新實例。看看這兩個類,它應該變得相當明顯,你需要做什麼。

0

我同意所有寫在這裏。該線程可以通過兩種方式創建。

  1. 擴展線程類。 YouTube Tutorial
  2. 爲了實現Runnable接口YouTube Tutorial

實施例爲第一方法

public class MyThread extends Thread { 


public void run() 
{ 
    int iterations = 4; 


     for(int i=0;i<iterations;i++) 
     { 

      System.out.println("Created Thread is running " + Thread.currentThread().getId() + " Printing " + i) ; 
      try { 
       sleep(3000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       System.err.println(e); 
      } 
     } 


    System.out.println("End of program"); 
} 

}

要創建一個線程

MyThread myThread = new MyThread(); 

myThread.start(); 

第二方法來實現可運行接口

public class RunnableThread implements Runnable { 

@Override 
public void run() { 

    int iterations = 4; 


    for(int i=0;i<iterations;i++) 
    { 

     System.out.println("Runnable Thread is running " + Thread.currentThread().getId() + " Printing " + i) ; 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      System.err.println(e); 
     } 
    } 


System.out.println("End of program"); 
} 

}

要創建一個線程

new Thread(new RunnableThread()).start(); 

所以我認爲你可以在你的case語句