2016-02-04 65 views
0

我有一個for循環,其中包含一個線程。代碼有效,但參數沒有正確傳遞給函數。你可以幫我嗎?Android中的for循環線程

for(i= 1 ;i < 30; i++) { 
    Thread thread = new Thread() { 
     @Override 
     public void run() { 
      example_function(i); 
     } 
    }; 

    thread.start(); 
} 
+1

'我'需要'最後'在匿名'Thread'內部類中可見:)除此之外,什麼不是正確的?預期的結果是什麼,實際的結果/產出是什麼? – Shark

+0

在函數i中打印i值,它們不是1到30.有些值是2或3倍 – Shockelduck

+1

我猜''i''是一個類字段,這就是爲什麼它沒有最終運行。當你運行你的線程並打印'i'可能會多次增加,這就是爲什麼你會得到重複。 –

回答

1

擴展Thread一個參數:

class IntThread extends Thread { 

    private int i; 

    public IntThread(int i) { 
     this.i = i; 
    } 

    @Override 
    public void run() { 
     example_function(this.i); 
    } 
} 

然後執行它:

for(int i= 1 ;i < 30; i++) { 
     new IntThread(i).start(); 
    } 
0

在運行之前,您應該添加一個字段詮釋J到你的線程,並與thread.j初始化=我你的線程

for(i= 1 ;i < 30; i++) { 
Thread thread = new Thread() { 
    final int j; 
    @Override 
    public void run() { 
     example_function(j); 
    } 
}; 
thread.j = i; 
thread.start(); 
} 
+2

你在正確的軌道上,但是這段代碼不會編譯 - 'Thread'沒有一個名爲'j'的成員 - 並且'final'成員無論如何都不能改變。 – 323go

2

此代碼看起來可疑,但您應該真正使用Runnable與線程。

像這樣的打印你想要什麼,如果你添加一個MyRunnable類象下面這樣:

private class MyRunnable implements Runnable { 
    private int i; 
    public MyRunnable(int i) { 
     this.i = i; 
    } 

    @Override 
    public void run() { 
     example_function(i); 
    } 
} 

,然後你的for循環變成:

for(i= 1 ;i < 30; i++) { 
    new Thread(new MyRunnable(i)).start(); 
} 

的號碼仍然可以打印出的順序但每個只會打印一次。