1.为了实现进程同步,用一个boolean型的静态变量作为互斥锁不行吗?为什么非要用synchronized实现所谓的同步方法以达到原子操作的目的?
2.assert语句为什么不能简单的用if语句来实现?LZ不才,还请各位不吝赐教~

解决方案 »

  1.   

    1.是线程同步,不是进程同步吧
    2.涉及到Java内存模型,不是简单的处理下信号的问题。
    3.原子操作不仅仅是变量的赋值和读取
      

  2.   

    java内存模型,看来我菜在这了,何谓java内存模型?
      

  3.   

    楼主能否告诉我怎么用一个boolean型的静态变量作为互斥锁来实现线程同步?小弟不懂assert语句知识用来调试程序的,不开断言时不起作用,但是if语句是必须执行的,没必要。
      

  4.   

    哥们,不要自称小弟啊~我也就22,以下是我在看多线程时,联系进程的信号量机制所产生的想法private static boolean locked=false;
    private static boolean isEmpty=true;
    public void Read()
    {
    if(locked==false&&isEmpty==false)
    {
    locked=true;//临界资源即将被使用
    ...     //临界资源正在被使用
    isEmpty=true;//临界资源被读取后的置空标记
    locked=false;//临界资源已被使用完毕
    }
    }
    public void Write()
    {
    if(locked==false&&isEmpty==true)
    {
    locked=true;
    ...
    isEmpty=false;
    locked=false;
    }
    }
      

  5.   

    assert是验证啊,写test的时候用的。if是判断,又不验证
      

  6.   

    楼主:如果只用boolean类型来标记的话,是实现不了的。A线程访问时boolean="false"这时B线程也会这样执行的。B线程进来后,A线程再将boolean设为“true”已经起不到作用了。assert它是可以设置的也只是在测试的时候起作用,等到项目正式运行的时候。就不起作用了。相当于一个开关把它关闭了。而if无论什么时候都是要执行的。