我正在运行两个单独的线程(Android SDK)主线程,另一个计算数字输入传感器上的状态更改次数。我希望访问主线程中的状态更改计数以将数据发送到其他位置。我能够暂停传感器线程,使用getter传递值,然后恢复线程吗?我还想在采样后重置计数器(使用setter?)。
实施此操作的最佳做法是什么?
答案 0 :(得分:0)
这类似于生产者消费者问题。您可以拥有一个长度的阻止队列。
主要线程 - 消费者
其他线程(计算状态更改)--producer
用于解决生产者消费者问题的Java API: BlockingQueue
在其他线程中读取值,并将其放在BlockingQueue(大小为1)中。主线程将检查队列并读取值。一旦读取了值,“其他线程”就可以再次设置一个新值。这将保证您的值被主线程读取然后重置。
API:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html
答案 1 :(得分:0)
如果计数是int
,您只需从主线程访问它即可。
答案 2 :(得分:0)
您应该使用同步关键字,这可以保证您只使用一个线程同时访问代码的安静。 以下链接包含更多详细信息,描述了与您类似的用例:http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html