Java 线程 - 这是同步的正确使用吗

标签 java multithreading bluetooth

我正在 Android 上使用蓝牙;缺点是,如果套接字当前未连接,我只想打开一个新线程来接收 - 我正在使用 boolean 值进行测试。

所以:

class Main {

   protected boolean mConnected;

   public void startClientConnection() {
      ClientRunnable thread = new ClientRunnable() {
         @Override public void manageSocket(BluetoothSocket pSocket) {
            synchronized (this) {
               if (!mConnected) openReadingThread(pSocket);
            } // end synchronized()
         } // end manageSocket()
      }; // end ClientRunnable
   } // end startClientConnection()

} // End CLASS

已编辑: 本质上,我需要知道的是,因为Runnable会在单独的线程上运行,但是mConnected变量只会在主线程中改变,是否需要同步。

最佳答案

在这种情况下,您创建的每个线程都有自己的锁(对象本身) 您应该使用静态的东西(例如类)作为锁。

关于Java 线程 - 这是同步的正确使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915163/

相关文章:

java - 开始时关闭 Android 键盘

java - JAXB和enum实现接口(interface)

C++ - 如何分块文件以进行同步/异步处理?

使用缓冲区和线程进行 Java TCP byteArray 传输

c++ - 如果有足够多的事件,boost::mutex 可以锁定操作系统吗?

linux - 在 Fedora 20 上使用 bluez 注册一个 sdp 服务

ios - 如何为多个设备实现核心蓝牙功能?

java - 如何将 java.sql.Date 转换为 dd/MM/yyyy 格式的 java.util.Date?

iphone - 如何在 iOS 上阅读短信?

java - 在 Java 中, `synchronized` 等同于 `synchronized (this)` 吗?