public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}如下把方法同步起来public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
synchronized public void inc1() {
c1++;
}
synchronized public void inc2() {
c2++;
}
}
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}如下把方法同步起来public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
synchronized public void inc1() {
c1++;
}
synchronized public void inc2() {
c2++;
}
}
再回忆了一下,好像一个是同步块(第一个),另一个是同步方法。
第一段上当多个线程运行到这个方法里面,是通过看lock对象是否加锁,
第二段上当要执行这个方法时,检查的是这个方法上是否加锁。
奶奶的不知道怎么才说得清这个问题。好像记得说第一段这种写法好像可以隐式调用其他同步方法,不用等锁释放,学过就没用过这鬼东西