请问我在线程1中进行
public static Object o;Synchronize(o){
method1();
}请问在线程1执行method1方法的过程中
线程2可以读取对象o的内容吗?

解决方案 »

  1.   

    线程1执行method1方法的过程中它会获得对象o的lock,其他线程要想操作对象o就必须等待Synchronize块执行完毕后线程1释放掉o的lock。
      

  2.   

    弄错了哦。。呵呵。Synchronize块执行的时候需要获得对象o的lock,但其他线程来操作对象o是可以的,只要不是同步的操作就行。
      

  3.   

    当然可以阿,但是如果在没有获得Synchronize监视锁的情况下读,读到的很可能是不正确的值。
      

  4.   

    可以啊,线程除非还想去操作那快代码,才不行,操作o对象是可以的,对象o就是一个key,标志一下而已,操作key是没有问题的
      

  5.   

    要看线程2是不是需要获得o对象的锁
    也就是线程2 的method是不是也有synchronized(o)
    class WriteThread extends Thread{

    public void run(){
    synchronized(Test.lock){
    System.out.println("writing...");
    try{
    Thread.sleep(3000);
    }catch(InterruptedException ie){

    }
    System.out.println("writing finished...");
    }
    }
    }class ReadThread extends Thread{
    public void run(){
    //synchronized(Test.lock){
    System.out.println("reading...");
    System.out.println("reading finished...");
    //}
    }
    }class Test {
    public static String lock = "lock";
    public static void main(String args[]) throws Exception {

    new WriteThread().start();
    new ReadThread().start(); }
    }
    //在ReadThread里看看有没有synchronized运行情况有什么不同
      

  6.   

    看线程2是否加上synchronized(ThreadA.lock) 代码
    如果有加,则连read都不能, 要等待线程1解锁如果线程2没加上synchronized(ThreadA.lock), 则线程2可以随便读写.
      

  7.   

    看线程2是否加上Synchronize(o) 代码 
    如果有加,则连read都不能, 要等待线程1解锁 如果线程2没加上Synchronize(o)则线程2可以随便读写.