Java(Android)线程-每隔一段时间重复任务,并访问值

Java(Android)线程-每隔一段时间重复任务,并访问值,java,multithreading,Java,Multithreading,我在Android上编程,但我想这是一个普通的Java 101问题 我希望myMethod在不阻塞UI的情况下每X毫秒运行一次—应该可以启动和停止此线程。X毫秒的值将在运行时更改。myMethod需要对UI操纵的数组进行读取访问 我该怎么做?由于时间间隔的变化,我不能使用时间表;这对sleepint X来说是有效的吗?如果我在一个新类中启动一个新的可运行线程或扩展线程,我如何读取UI类的数组?是否存在类似parent.getarray的内容?。解决这个问题的最佳方法是什么?您可以创建一个java

我在Android上编程,但我想这是一个普通的Java 101问题

我希望myMethod在不阻塞UI的情况下每X毫秒运行一次—应该可以启动和停止此线程。X毫秒的值将在运行时更改。myMethod需要对UI操纵的数组进行读取访问


我该怎么做?由于时间间隔的变化,我不能使用时间表;这对sleepint X来说是有效的吗?如果我在一个新类中启动一个新的可运行线程或扩展线程,我如何读取UI类的数组?是否存在类似parent.getarray的内容?。解决这个问题的最佳方法是什么?

您可以创建一个java.util.Timer对象来保存一个TimerTask对象。这样,您就可以简单地将计时器安排为每次所需的X作用于计时器任务


您可以创建一个java.util.Timer对象来保存TimerTask对象。这样,您就可以简单地将计时器安排为每次所需的X作用于计时器任务

ScheduledThreadPoolExecutor类为您提供了调度功能

我不知道安卓系统,但它似乎也是

使用STPE很简单:您创建可运行或可调用的实例,并通过schedule方法将其与调度信息一起传递给您的执行者—调用频率、开始延迟是多少

要从UI线程访问数组,需要使用某种同步。看看AtomicReferenceArray、AtomicLongArray或AtomicIntegerArray,如果它们可以帮助您的话,它们可以在不进行任何其他同步的情况下为您提供对数组元素的原子访问,尽管您最好将数组变量设为final。另一种选择是将对阵列的所有读写操作放入同步块中。另一种可能是使用CopyOnWriteArrayList。若您还需要从后台任务更新UI,则需要将更新代码包装到另一个可运行代码中,并将其传递给UI线程。最好的选择实际上取决于您正在做什么。

ScheduledThreadPoolExecutor类为您提供了调度功能

我不知道安卓系统,但它似乎也是

使用STPE很简单:您创建可运行或可调用的实例,并通过schedule方法将其与调度信息一起传递给您的执行者—调用频率、开始延迟是多少


要从UI线程访问数组,需要使用某种同步。看看AtomicReferenceArray、AtomicLongArray或AtomicIntegerArray,如果它们可以帮助您的话,它们可以在不进行任何其他同步的情况下为您提供对数组元素的原子访问,尽管您最好将数组变量设为final。另一种选择是将对阵列的所有读写操作放入同步块中。另一种可能是使用CopyOnWriteArrayList。若您还需要从后台任务更新UI,则需要将更新代码包装到另一个可运行代码中,并将其传递给UI线程。最好的选择取决于你到底在做什么。

+1。强制性有效Java参考::摘要:计时器更易于使用;STPE更灵活。是的。我从不同的来源JCiP.+1总结了两个at之间的差异。强制性有效Java参考::摘要:计时器更易于使用;STPE更灵活。是的。我从不同的来源JCiP总结了这两种方法之间的差异。