在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述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核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!