在我的申请中,我有MainThread
,我有一个SeperateThread
我的线程几乎完美无缺。唯一的问题是我无法关闭SeperateThread
。
public void run()
{
isRunning = true;
while(isRunning)
{
Log.d(TAG, "Running...");
long currentTime = SystemClock.uptimeMillis();
}
}
public void StopThread()
{
isRunning = false;
}
seperateThread.StopThread();
然后在线程中我有一个方法只关闭volatile boolean isRunning
。即使我在调试器中单步执行,注意到线程将布尔值切换为关闭。
答案 0 :(得分:2)
你肯定希望为此使用新的并发包,并获取Java Concurrency in Practice的副本,并了解更多相关信息。线程看似简单。
为什么你的代码不起作用可能与你没有按照你期望的方式将isRunning设置为false。但是,无论如何,java.util.concurrency包都会为您执行此操作。
在您的情况下,您应该查看Executor框架。所以你的代码看起来像这样:
ExecutorService exec = Executors.newFixedThreadPool(1);//A field somewhere
//Start your thread
exec.submit(new Runnable(){
@Override
public void run() {
while (!exec.isShutdown()) {
Log.d(TAG, "Running...");
//Do stuff
}
}
});
//when done
exec.shutdown();
一夜之间考虑这个问题,这可能是一个更好的方法:
ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
exec.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
//Do stuff
}
}, 0, 1, TimeUnit.MILLISECONDS);
//when done
exec.shutdown();
答案 1 :(得分:0)
isRunning = true;
while(isRunning)
{
Log.d(TAG, "Running...");
...//Do something
}
你的while循环中断了吗?或者你在其他地方设置isRunning = false?