我正在运行两个独立的线程(Android SDK),一个是主线程,另一个是统计数字输入传感器上状态变化次数的线程。我希望访问主线程中的状态更改计数,以便将数据发送到其他地方。我是否可以挂起传感器线程,使用getter传递值,然后恢复线程?我还想在采样后重置计数器(使用设置器?)。
实现这一点的最佳实践是什么?
发布于 2012-12-11 14:35:15
这类似于生产者消费者的问题。你可以有一个单一长度的阻塞队列。
主线程--消费者
生产者其他线程(统计状态变化)--
解决生产者-消费者问题的Java API:BlockingQueue
读取其他线程中的值,并将其放入BlockingQueue(大小为1)中。主线程将检查队列并读取值。一旦值被读取,‘其他线程’可以再次放入一个新的value.This,它将保证你的值被主线程读取,然后被重置。
接口名:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html
发布于 2012-12-11 15:11:10
如果计数是一个int,你可以直接从主线程访问它,没有问题。
发布于 2012-12-11 15:20:38
你应该使用synchronized关键字,它可以保证你的代码在同一时间只有一个线程访问。这里有一个包含更多细节的链接,描述了一个与您的用例类似的用例:http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
https://stackoverflow.com/questions/13814416
复制相似问题