我知道是同步,但是是不是意思是:
目前已经执行了某个类的一个synchronized类型的函数,整个程序中,也不会同时执行别的类的有synchronized的函数,因为我在多个不同类访问一个相同变量,我想知道多线程中这样是不是安全的。

解决方案 »

  1.   

    如果synchronized类型的函数体需要修改数据的话,用synchronized是多线程安全的。
      

  2.   

    多个类的对象同时访问如:public synchronized void getFunction(){}的时候,只能在一个对象访问完后,另一个对象才能开始执行这个getFunction
      

  3.   

    谢谢大家的热情,我还想了解一下,
    举一个例子吧,比如
    class A
    {
     public synchronized void getFunction()
    {
    ....
    }
    }class B
    {
     public synchronized void setFunction()
    {
    ....
    }
    }比如在A中是打开一个文件,读取数据,B类中是打开文件保存数据。
    可能会有多个线程不知道什么时候访问A或者B的方法,
    这样能保证读文件和写文件不会同时进行吗?
      

  4.   

    java 的进程同步机制是采用管程,
    一个synchronized 关键字只对一个特定的对象有用,
    Java 在实现的时候每一个对象有一个琐,synchronize是对这个对象的锁操作,在字节码中对应monitorenter,和monitorexit指令。都是针对对象的。
    synchronized(this){
    this.mi=i;
    }
    因此我认为你的例子是不能保证同步的,要同步就应该如管程模型一样,将对资源的操作放在一个对象中。