我是Java的新手,我遇到了问题。我已经从Android的教程中复制了一些代码,现在我想将一个整数变量传递给方法run(),所以我可以为每个循环增加它,然后在后台Thread之外捕获它。我该怎么做?
int gg= 0;
Thread background = new Thread(new Runnable() {
public void run() {
try {
while (pBarDialog.getProgress() <= 100) {
Thread.sleep(100);
gg++; // the increment here
progressHandler.sendMessage(progressHandler
.obtainMessage());
}
if (pBarDialog.getProgress() == 100) {
pBarDialog.dismiss();
}
} catch (java.lang.InterruptedException e) {
// if something fails do something smart
}
}
});
//catch gg here
答案 0 :(得分:3)
您不能为run()方法指定参数。您可以将int变量声明为field并在内部类中使用它。
public class TestActivity extends Activity
{
private volatile int no;
.....
}
编辑:(来自@alf的建议)您可以在字段中使用volatile
modifier,因此所有其他线程都可以立即看到更改后的值。
答案 1 :(得分:1)
拥有自己的类并使用其构造函数传递计数器,我还没有尝试过,但我会从这样的事情开始:
class MyThread implements Runnable {
private volatile int counter;
public MyThread( int counter ) {
this.counter = counter;
}
public void run() {
...
}
public getCounter() {
return counter;
}
}
MyThread mt = new MyThread( 10 );
Thread t = new Thread( mt );
t.start();
// after some time
t.getCounter();
答案 2 :(得分:0)
private volatile int gg;
public void myMethod() {
Thread background = new Thread(new Runnable() {
@Override
public void run() {
try {
while (pBarDialog.getProgress() <= 100) {
Thread.sleep(100);
gg++; // the increment here
progressHandler.sendMessage(progressHandler.obtainMessage());
}
if (pBarDialog.getProgress() == 100) {
pBarDialog.dismiss();
}
} catch (java.lang.InterruptedException e) {
// if something fails do something smart
}
}
});
System.out.println(gg);
}
答案 3 :(得分:0)
如果我是你,我会调查AtomicInteger,即incrementAndGet()
方法。
使gg
字段确实会将访问提供给gg
,而volatile
会使更改可见,但由于你的意图不明确,我不能确定你没有其他线程增加相同的值:你没有原子性,所以只要你有多个线程做gg++
,您可能会得到错误的结果。