我有一个线程锁定了在我的Android应用程序仍有一些未知的原因,每当我试图杀死从线程A线程B的一个问题(通常,有时它的工作)。我猜想这是因为我的一些方法在线程间进行调用而未被同步。我制作了取消方法和许多基本上是事件处理程序同步的方法,并使几个共享变量变得不稳定并且一切正常。在Java中同步声明方法进行权衡?
我不知道是哪20个奇挥发性/同步声明我实际上增加解决了这个问题,这让我开始思考“我应该在乎吗?它的工作原理不惹它!”中
所以,我的问题是:是否与声明同步的方法或原挥发掉相关的任何交易?如果不需要这些声明,是否有任何理由避免这些声明?
编辑
的问题线程(S)是接收/发送数据流,这样的AsyncTask和其他辅助线程型的解决方案并不能很好地工作蓝牙连接。它们设计用于执行有限的任务,并在完成时终止。一些像ASyncTask一样,也增加了很多简单的杀死应用程序的开销。对于像这样持续运行的线程,使用线程仍然是最好的方法。
我使用的是Android Service生成和管理线程,所以我下面在这方面Android的设计范例。
有一个(小?)固有的性能损失。很难说出“锁定线程的问题”是什么(轮询非易失性成员字段?),但是自由添加“synchronized”听起来像是一个解决死锁的好方法,并且您怎么知道您的应用程序是没有比赛条件?最大的问题是你在线程之间有很多共享状态 - 你需要决定什么需要共享,确保共享状态是线程安全的(尽可能地提供不可变的帮助),并决定线程如何通信(Handler/ConcurrentLinkedQueue/LinkedBlockingQueue?)。 –