当前位置: 代码迷 >> J2SE >> 请问一个线程同步的有关问题()
  详细解决方案

请问一个线程同步的有关问题()

热度:89   发布时间:2016-04-24 12:26:29.0
请教一个线程同步的问题(在线等)
请教高手们一个问题  
在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);    }}
------解决方案--------------------
探讨
有木有这种情况,a执行完A后,已经释放了A的锁,还未获得B的锁,但是b线程获得了A的锁,当b释放A的锁时,a获得了B的锁,此时数据依然被a修改过了,这种问题怎么解决呢?
  相关解决方案