书上说,下面两段代码是非安全,我能理解:
(1)
public class MutableInteger {
private int value; public int get() {
return value;
} public void set(int value) {
this.value = value;
}
}
(2)
public class SynchronizedInteger {
private int value; public int get() {
return value;
} public synchronized void set(int value) {
this.value = value;
}
}但说下面的代码是线程安全的,我理解不了:
(3)
public class SynchronizedInteger {
private int value; public synchronized int get() {
return value;
} public synchronized void set(int value) {
this.value = value;
}
}
问题:如果一个线程在set,如果还有另外一个线程在get,那后者的线程会别阻塞吗?synchronized针对函数的作用到底是怎样的?对get和set都synchronized,和直接对value进行synchronized,有什么区别吗?十分感谢,请赐教!
(1)
public class MutableInteger {
private int value; public int get() {
return value;
} public void set(int value) {
this.value = value;
}
}
(2)
public class SynchronizedInteger {
private int value; public int get() {
return value;
} public synchronized void set(int value) {
this.value = value;
}
}但说下面的代码是线程安全的,我理解不了:
(3)
public class SynchronizedInteger {
private int value; public synchronized int get() {
return value;
} public synchronized void set(int value) {
this.value = value;
}
}
问题:如果一个线程在set,如果还有另外一个线程在get,那后者的线程会别阻塞吗?synchronized针对函数的作用到底是怎样的?对get和set都synchronized,和直接对value进行synchronized,有什么区别吗?十分感谢,请赐教!
我的意思是:
"如果一个线程在set,如果还有另外一个线程在get,那后者的线程会别阻塞吗?"如果不能阻塞,那指定是非线程安全的,这就和书上说的不一样了.
请指教!
就意味着,如果调用了其对象的一个synchronized方法,
那么,这个对象的其他synchronized方法会被阻塞
得到第一个方法调用完成后,才会做之后的synchronized方法
针对的是同一个对象的话,当然会阻塞。
二:
synchronized关键字的作用就是同步,同步谁呢?同步调用该方法的对象。
三:对value进行synchronized?什么意思