不用同步synchronized 如何保持一个人在操作某个对象呢 ,比如说大家都可以操作A,但是如果有C操作A时候,B不能操作,只能等待,等到C完了,B才可以调用
看到一个方法,是在A里面设置一个boolean属性,想当于一个锁,只有在ture的时候才能使用,令一个在等待,这个等待时间如何控制呢?

解决方案 »

  1.   

    不知道为什么要这么干,但是要想知道对象是否可用,要么轮训要么notify,你看来是要轮训的时间了。这个估计要靠你估计你这个A的操作时间是多少然后设置了。
      

  2.   

    可以 超过 你忍耐的时间 break的 呵呵
      

  3.   

    问题在于,你如何保证设置这个boolean变量时保持同步?
      

  4.   


    当C操作A的时候, A的boolean属性打为false,当B产生调用的时候,检查A的boolean属性, 如果为false则在一个While循环中等待。时间可以由你的应用确定, 估算一下, 把A调用完要花多少时间。就是你要设置的时间。
      

  5.   


    class SimplePC 
    {
        int n;
        boolean valueSet=false;
        synchronized int get()
        {
            if(!valueSet)
            {
                try
                {
                    wait();
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            System.out.println("get:"+n);
            valueSet=false;
            notifyAll();
            return n;
        }
        synchronized void put(int n)
        {
            if(valueSet)
            {
                try
                {
                    wait();
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            this.n= n;
            valueSet=true;
            System.out.println("put:"+n);
            notifyAll();
        }
    }