Java Android,当我必须在线程中使用syncronized时
我正处于Java应用程序的开始阶段。我已经用一些线程创建了一个服务,但我不知道何时必须使用synchronized,何时不使用 例如,我必须使用蓝牙连接连接到模块,然后使用带有两个线程的服务:ConnectThread放弃连接,ConnectedThread管理读/写连接 那么什么时候我必须使用synchronizedJava Android,当我必须在线程中使用syncronized时,java,android,multithreading,bluetooth,Java,Android,Multithreading,Bluetooth,我正处于Java应用程序的开始阶段。我已经用一些线程创建了一个服务,但我不知道何时必须使用synchronized,何时不使用 例如,我必须使用蓝牙连接连接到模块,然后使用带有两个线程的服务:ConnectThread放弃连接,ConnectedThread管理读/写连接 那么什么时候我必须使用synchronized 谢谢当不同线程使用相同(即全局)变量时,基本上是在共享信息时,请使用Synchronized关键字。检查代码,看看是否是这种情况 当每个线程使用的变量是本地变量时,不需要同步。然
谢谢当不同线程使用相同(即全局)变量时,基本上是在共享信息时,请使用Synchronized关键字。检查代码,看看是否是这种情况
当每个线程使用的变量是本地变量时,不需要同步。然后使用它将导致性能损失,并可能导致不一致 我尽量避免使用线程,因为我对它们没有太多经验,但我会尽可能简单地解释它 只有当多个线程可以访问您的方法或代码块时,才使用synchronized
这是一个简单的解决方案,可以防止其他线程在另一个线程仍在使用同一代码时访问该代码。这将有助于防止内存相关问题,但会导致性能问题。因为同步代码比非同步代码慢得多。我还认为死锁可能也是一个问题java中的多线程是一个非常复杂的问题。它只能通过实践和阅读文档或教程来理解。线程的可能重复不会访问代码,而是由它们执行,允许两个或多个线程同时执行同一代码没有内在的危害。重要的不是代码:同步是关于数据的。当一个线程不可能在不创建其他线程不能看到的临时无效状态的情况下推进程序状态时,就需要互斥(即,
synchronized
块提供的内容)。非常好的解释@jameslarge。并没有很好地表达我的想法…基本上是一个很好的答案,但可以改进。互斥(synchronized块中最明显的方面)并不总是因为两个或多个线程访问相同的数据而需要的。但是,当一个线程需要将数据置于其他线程不允许看到的临时无效状态时,它是必需的。很酷,感谢您的反馈,非常感谢!