使用同步时会对性能产生影响.volatile可以与synchronized结合使用以降低性能开销吗?例如,Counter的实例将在许多线程之间共享,每个线程都可以访问Counter的公共方法.在下面的代码中,volatile用于getter,synchronized用于setter
public class Counter
{
private volatile int count;
public Counter()
{
count = 0;
}
public int getCount()
{
return count;
}
public synchronized void increment()
{
++count;
}
}
Run Code Online (Sandbox Code Playgroud)
请告诉我这可能会破坏的情况?
在Implicit Grant中,访问令牌在回调URL中发回.这不是安全风险,因为如果此回调URL缓存在跃点中.一般情况下,建议不要在URL参数中发送敏感数据,并且此访问令牌将是访问所有安全用户资源的令牌.那么为什么它会在URL中作为片段传递
可能重复:
为什么Java Number数据类型没有溢出?
在Java中,当继续增加Byte值并且超过大小容量时,为什么不抛出任何运行时异常?例如:
public static void main(String[] args) {
byte b = 127;
++b;
System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将打印出来-128.如果抛出它会不会更好RuntimeException?为什么这样设计?
对于其他原始类型也是如此Integer:
int c = 2147483647;
++c;
System.out.println(c);
Run Code Online (Sandbox Code Playgroud)
上面的代码打印出来-2147483648.
当一个同步方法完成时,它是只把它修改的数据推送到主存,还是所有的成员变量,类似地,同步方法执行时,它是从主存中只读取它需要的数据还是清除所有的数据?缓存中的成员变量并从主内存中读取它们的值?例如
public class SharedData
{
int a; int b; int c; int d;
public SharedData()
{
a = b = c = d = 10;
}
public synchronized void compute()
{
a = b * 20;
b = a + 10;
}
public synchronized int getResult()
{
return b*c;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,假设计算由线程 A 执行,而 getResult 由线程 B 执行。执行compute后,线程A会用a和b更新主存还是会更新a、b、c和d。在执行 getResult 之前,threadB 将只从主内存中获取 b 和 c 的值,还是会清除缓存并获取所有成员变量 a、b、c 和 d 的值?
java multithreading synchronization caching java-memory-model