Synchronized关键字

java多线程synchronized关键字详解:

    1.对资源进行加锁,使得同一时间只有一个线程进行操作,同步用以就解决多线程同时访问可能出现的问题,当synchronized方法执行完成或发生异常,会自动释放锁。

    2.多个方法的多线程情况,如果一个对象有多个Synchronized方法,某个时刻某个线程进入某个Synchronized方法,那么该方法没有执行完毕前,其他线程是无法访问该对象的任何synchronized方法

结论:当synchronized关键字修饰方法时,该方法叫同步方法,java中每个对象都有一个锁,或者叫做监视器,当一个线程访问某个对象的Synchronized方法,将该对象上锁,其他任何线程无法访问该对象synchronized方法直到执行完毕后或者出现异常,才会将该对象锁释放。

   3.考虑静态的同步方法,当一个方法被synchronized和static修饰,非静态同步方法将对象上锁,静态方法不属于对象,属于类,它将这个方法所在类的class对象上锁

      结论:如果每个synchronized方法是static,当线程访问方法,它锁的不是synchronized方法所在的对象而是Class对象,因此当线程分别访问同一个类两个对象的两个static和synchronized方法时,他执行的顺序也是一个线程先去执行方法,执行完毕才会另一个线程才开始执行。

  4.synchronized块

       synchronized(object){}

      表示线程执行时将object对象上锁,当一个线程执行,将object对象锁住,另一个线程就不能执行对应的块了。可能方法只有几行代码涉及到线程同步问题所以synchronized块比synchronized方法更加细粒度地控制了多个线程的访问,只有synchronized块中不能同时被多个线程所访问,方法中其他语句仍可以被对象成所访问

参考http://mp.weixin.qq.com/s/geSfQ5TxRgqmqrK1Js3Jfg

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。