请教高手们一个问题
在Java中 用 synchronized 锁住同一个类中的两个方法A,B;
他的意思是 我用A时B也不能被用还是我用A时A不能用,用B时B不能用?
------解决方案--------------------
楼主的示例其实共享的资源是test1,你需要同步的是这个对象。
- Java code
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Demo { private int i = 100; int setI(int y) { System.out.println("减去" + y); return i = i - y; } int getI() { return i; }}public class SynchronrizedTest implements Runnable { Lock lock = new ReentrantLock(); private Demo demo = new Demo(); public static void main(String[] args) { SynchronrizedTest test1 = new SynchronrizedTest(); Thread thread1 = new Thread(test1, "线程1"); Thread thread2 = new Thread(test1, "线程2"); thread1.start(); thread2.start(); } public void run() { for (int i = 0; i < 5; i++) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } lock.lock(); System.out.println(Thread.currentThread().getName() + "操作之前: " + demo.getI()); this.setI(10); System.out.println(Thread.currentThread().getName() + "操作之后: " + demo.getI()); System.out.println(); lock.unlock(); } } int setI(int y) { return demo.setI(y); }}
------解决方案--------------------