2016-02-04 48 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(); 
} 

的号码仍然可以打印出的顺序但每个只会打印一次。