zoukankan      html  css  js  c++  java
  • Java多线程中的锁机制

      在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java多线程中的锁机制,更多Java专业知识,请看广州疯狂java培训官网;

      Java中的每个对象都可以用作一个实现同步的锁,这种称为内置锁,内置锁是可重入的,因此如果某个线程试图获取一个已经由它自己持有的锁,那么这个请求就会成功。

      重入的实现方法是,为每个锁关联一个获取计数值和一个所有者线程,当计数值为0,这个锁就是开放的,当线程请求该锁时,JVM将记下锁的持有者,并且将计数值+1,如果同一个线程再次回去该锁,计数值继续+1,通过计数值可以看出重入的次数,计数值为0,则表示锁已经释放。

      看一个重入锁的实例:

      class Father {

      public synchronized void doSth(){

      System.out.println("Father is doSth...");

      }

      }

      class Child extends Father {

      public synchronized void doSth() {

      System.out.println("Child is doSth...");

      super.doSth();

      }

      }

      class Father {

      public synchronized void doSth(){

      System.out.println("Father is doSth...");

      }

      }

      class Child extends Father {

      public synchronized void doSth() {

      System.out.println("Child is doSth...");

      super.doSth();

      }

      }

      以上一段代码,在执行Child类的super.doSth()方法时,并不会发生死锁现象,这两个类中的方法都是synchronized同步的,因此执行前都会获取Father的锁,正因为是可重入的,才可以多次获取该锁,不然,第二次获取该锁时必然发生死锁现象。

      synchronized虽然提供了状态同步的功能,加锁限制,但是使用时,一定要切记加锁代码块的大小,否则会影响性能,这种同步代码块的大小需要去权衡。

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。没有工作经验的学员,在疯狂java,通过大量全真经典企业级项目进行集中培训,课上讲师讲解和课下项目练习课上课下双管齐下,学员通过数月培训都可获得1-2年的工作经验,进而在同类的求职者中脱颖而出。疯狂Java培训让你体会java编程的快乐,项目开发的兴奋,成就感,通过短短几个月的时间,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!

  • 相关阅读:
    如何查找.NET程序内存不断上涨的原因(CLRProfiler)
    IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备
    三十而立,从零开始学ios开发:Hello World!
    【原】使用Cocos2d制作一个类似于魔塔的iPhone游戏第一部分(上)
    用python实现一个socket echo程序 && tcp socket的几个关闭状态
    IOS编程浅蓝教程(二) HelloWrld! 建立你的第一个iPhone应用程序
    如何直接强制客户端刷新.js文件
    (WCF的实现、控制台托管与.net平台的调用)
    关于批量数据更新的问题(C#高性能)
    不容错过的window8 metro UI风格的web资源
  • 原文地址:https://www.cnblogs.com/gojava/p/3335249.html
Copyright © 2011-2022 走看看