【问题标题】:Android, when I must use syncronized in a threadAndroid,当我必须在线程中使用同步时
【发布时间】:2015-07-06 13:22:58
【问题描述】:

我刚开始使用 Java 应用程序。我已经创建了一个带有一些线程的服务,但我不明白什么时候必须使用同步,什么时候不使用。

例如,我必须通过蓝牙连接到模块,然后我使用具有两个线程的服务:ConnectThread 放弃连接,ConnectedThread 管理读/写连接。

那么我什么时候必须使用同步?

谢谢

【问题讨论】:

标签: java android multithreading bluetooth


【解决方案1】:

当不同线程使用相同(即全局)变量时,使用 Synchronized 关键字,主要是在共享信息时。检查代码,看看是否是这种情况。

当每个线程使用的变量是本地的时,不需要同步。然后使用它会导致性能损失,并可能导致不一致。

【讨论】:

  • 大部分是一个很好的答案,但可以改进。互斥(synchronized 块中最明显的方面)并非总是需要,因为两个或多个线程访问相同的数据。但是,当一个线程需要将数据置于一个临时的无效状态时,其他线程不能看到。
  • 酷,感谢您的反馈,非常感谢!
【解决方案2】:

我尽可能避免使用线程,因为我对它们没有那么丰富的经验,但我会尽量简单地解释它。

只有在多个线程可以访问您的方法或代码块时才使用同步。

这是一个简单的解决方案,可以防止其他线程访问相同的代码,而另一个线程仍在使用它。这将有助于防止与内存相关的问题,但会导致性能问题。因为同步代码比非同步代码慢得多。我也相信死锁也可能是一个问题

【讨论】:

  • 线程不访问代码,他们执行它,并且允许两个或多个线程执行相同的代码没有固有的危害同时。重要的不是代码:同步就是数据。当一个线程不可能在不创建不允许其他线程的临时无效状态的情况下推进程序状态时,需要互斥(即,synchronized 块给您的内容)去看看。
  • 很好的解释@jameslarge ..感谢您澄清这一点。并没有很好地表达我的想法......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 2017-10-28
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多