gpt4 book ai didi

java - 我可以使用 Thread isAlive 方法来更改我的 runnable 中的状态以执行代码吗?

转载 作者:行者123 更新时间:2023-11-29 22:09:37 25 4
gpt4 key购买 nike

我有两个按钮,当用户单击第一个按钮时,它将启动一个线程来更新 UI,当用户单击第二个按钮时,应用程序将为第一个线程设置一个 boolean 变量以不允许它更新线程,然后它将启动第二个线程。这是我的 Runnable:

class MyRunnable implements Runnable {
boolean isUpdateEnabled = true;

@Override
public void run() {
// Retrieve list from Internet. takes about 10 sec to complete.
if (isUpdateEnabled) {
runOnUiThread(new Runnable() {
public void run() {
System.out.print("Update UI");
}
});
}
}

void enableUpdate(boolean enable) {
isUpdateEnabled = enable;
}
}

但是由于线程需要一段时间才能完成,如果用户再次按下第一个按钮,我可以检查第一个线程是否存在,然后启用它来更新线程,同时保证 if ( isUpdateEnabled) 将执行是否或正确的方法是什么?

    ...
// on button click
if(thread.isAlive())
runnable.enableUpdate(true);
...

最佳答案

我想你需要在这里做两件事:

  1. 同步对 isEnableUpdate 的访问,因为两个不同的线程正在访问它。

  2. 您可能希望将 public void run 中的代码分成更小的 block ,并在完成某些逻辑工作或类似工作时每隔一段时间检查一次 isEnableUpdate 变量。

示例:

class MyRunnable implements Runnable 
{
boolean isUpdateEnabled = true;
Object myUpdateLockObj = new Object();

@Override
public void run() {
// Retrieve list from Internet. takes about 10 sec to complete.
if (isUpdateEnabled) {
runOnUiThread(new Runnable() {
public void run() {
lock(myUpdateLockObj)
{
if (!isUpdateEnabled) return;
}
//do work in parts
System.out.print("Update");

lock(myUpdateLockObj)
{
if (!isUpdateEnabled) return;
}
// do work in parts
System.out.print(" UI");
}
});
}
}

void enableUpdate(boolean enable)
{
synhronized(myUpdateLockObj)
{
isUpdateEnabled = enable;
}
}
}

关于java - 我可以使用 Thread isAlive 方法来更改我的 runnable 中的状态以执行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com