小编Goz*_*Man的帖子

Java:引用同步对象需要volatile/final吗?

这似乎是一个非常基本的问题,但我找不到明确的确认.

假设我有一个类本身正确同步:

public class SyncClass {

   private int field;

   public synchronized void doSomething() {
       field = field * 2;
   }

   public synchronized void doSomethingElse() {
       field = field * 3;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我需要引用该类的实例,在线程之间共享,我仍然需要声明该实例是volatile还是final,我是对的吗?如:

public class MainClass { // previously OuterClass

    public static void main(String [ ] args) {

        final SyncClass mySharedObject = new SyncClass();

        new Thread(new Runnable() {
            public void run() {
                mySharedObject.doSomething();
            }
       }).start();

       new Thread(new Runnable() {
            public void run() {
                mySharedObject.doSomethingElse();
            }
       }).start(); …
Run Code Online (Sandbox Code Playgroud)

java multithreading volatile synchronized

15
推荐指数
1
解决办法
2291
查看次数

Android,在网络共享和连接到接入点时检测 WiFi 的本地 IP 和子网掩码

我需要在 Android 设备上检测 WiFi 网络上的本地 IP 地址和子网掩码(以便严格计算本地子网的 UDP 广播地址)。

当设备连接到接入点时,以下功能正常工作:

// Only works when NOT tethering
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

DhcpInfo dhcp = wifi.getDhcpInfo();
if (dhcp == null)
    throw new IOException("No DHCPInfo on WiFi side.");

foo(dhcp.ipAddress, dhcp.netmask);
Run Code Online (Sandbox Code Playgroud)

但当 Android 设备通过网络共享提供接入点时,它不起作用:当 Android 设备是 DCHP 服务器的客户端时,DhcpInfo 似乎包含由 DCHP 服务器设置的信息,而不是当 Android 设备本身提供 DHCP 服务时。在网络共享中,我能找到的最有希望的解决方案是:

// No way to get subnet mask
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

WifiInfo info = wifi.getConnectionInfo();
if (info == null)
   throw new IOException("No connection info on …
Run Code Online (Sandbox Code Playgroud)

java networking android netmask wifi

4
推荐指数
1
解决办法
5508
查看次数