2012-02-23 180 views
0

我有名字Socket和一類具有牽引功能,例如FUNC1 FUNC2運行兩個函數與線程

fucn1() { 
    while(true) { 
     ... 
    } 
} 

fucn2() { 
    while(true) { 
     ... 
    } 
} 

我想他們兩個線程在一個時間同時運行。我怎樣才能做到這一點??

class socket implement Runnable { 
    public void run() { 
     func1(); 
     func2(); 
    } 
} 

在這段代碼中,只有第一個函數被執行而不是第二個。我如何才能同時運行它們?

+0

這兩種方法都返回void且不帶參數? – Tudor 2012-02-23 17:58:28

回答

2

我的建議是:

,而不是使插座ClassRunnable, 如下面的示例所示創建兩個Runnable線程,並從那裏調用您的函數。從Socket類開始這兩個線程。

class Socket{ 
    private void startThreads() { 
      new Thread(new Th1()).start(); 
      new Thread(new Th2()).start(); 

    } 
} 
class Th1 implements Runnable { 
    @Override 
    public void run() { 
     fucn1(); 
    } 
} 
class Th2 implements Runnable { 
    @Override 
    public void run() { 
     fucn2(); 
    } 
} 
+0

請使用大寫字母命名類(Th1,Th2),因爲它是Java約定。我也不知道爲什麼在調用func1()和func2()函數後等待100毫秒?猜猜這只是我的無知。 – kajacx 2012-02-23 18:17:00

+0

我遵循了mehdi的命名約定。 ( 開玩笑)。無論如何要編輯答案。謝謝 – gtiwari333 2012-02-24 02:42:34

0

如果你想同時運行這兩個函數,產生兩個線程並在它自己的線程中運行每個函數。

這正是線程的用途。

+0

我是新的線程請解釋更多的感謝。 – 2012-02-23 17:54:58

+1

@mehdi:我會從這裏開始:http://docs.oracle.com/javase/tutorial/essential/concurrency/ – NPE 2012-02-23 17:56:40

2

您可以像這樣同時運行它們:

// start a thread for func1 
Thread t1 = new Thread(new Runnable() { 
     public void run() { 
      func1(); 
     } 
    }); 
t1.start(); 

// func2 will run in parallel on the main thread 
func2(); 

t1.join(); // if you want to wait for func1 to finish. 

您還沒有給出任何細節,所以我假設他們有沒有副作用。

+0

+1的好回答。 – 2012-02-23 18:11:10

0

您需要爲此場景創建兩個線程。

class socket implement runable 
{ 
    boolean condition; 

    public socket(boolean condition){ 
     this.condition = condition; 
    } 
    public void run() 
    { 
     if(condition == true){ 
      func1(); 
     }else{ 
      func2();   
     } 
    } 
} 

Thread t1 = new Thread(new Socket(true)); 
Thread t1 = new Thread(new Socket(false)); 


    t1.start(); 
    t2.start(); 

除此之外,您需要在每種方法中產生控制權,以確保每個線程都能獲得公平的運行機會。