Java 多线程变量访问

Java 多线程变量访问,java,android,multithreading,Java,Android,Multithreading,我运行两个独立的线程(Android SDK),一个是主线程,另一个是统计数字输入传感器上状态变化的数量。我希望访问主线程中的状态更改计数,以便将数据发送到其他地方。我是否能够挂起传感器线程,使用getter传递值,然后恢复线程?我还想在采样后重置计数器(使用设置器?) 实现这一点的最佳实践是什么?这类似于生产者-消费者问题。您可以有一个单一长度的阻塞队列 主线程--消费者 其他线程(统计状态更改)--生产者 Java API解决生产者-消费者问题:阻塞队列 读取其他线程中的值,并将其放入Blo

我运行两个独立的线程(Android SDK),一个是主线程,另一个是统计数字输入传感器上状态变化的数量。我希望访问主线程中的状态更改计数,以便将数据发送到其他地方。我是否能够挂起传感器线程,使用getter传递值,然后恢复线程?我还想在采样后重置计数器(使用设置器?)


实现这一点的最佳实践是什么?

这类似于生产者-消费者问题。您可以有一个单一长度的阻塞队列

主线程--消费者

其他线程(统计状态更改)--生产者

Java API解决生产者-消费者问题:阻塞队列

读取其他线程中的值,并将其放入BlockingQueue(大小为1)中。主线程将检查队列并读取值。一旦值被读取,“其他线程”可以再次放入一个新值。这将保证主线程读取您的值,然后重置


API:

如果计数是一个
int
,您可以直接从主线程访问它,而不会出现任何问题。

您应该使用同步关键字,这可以保证您的代码在同一时间只使用一个线程访问。
这里有一个更详细的链接,描述了一个与您类似的用例:

计算数字输入传感器上状态变化数量的线程是如何工作的?它是否定期休眠,或者传感器是否以某种方式通知它?
wait()
sleep()
等。它等待一个高值。然后添加到计数器。然后repeatsyer是一个int,但我必须锁定它吗?不需要锁定int。增加int是一个原子操作,您将在读取时获得正确的值(只要并发更新有正确的值…)