大家好,今天小编关注到一个比较有意思的话题,就是关于j***a语言关键字的问题,于是小编就整理了2个相关介绍j***a语言关键字的解答,让我们一起看看吧。
j***a哪个关键字可以对对象加互斥锁?
首先,J***a中synchronized可以实现对对象加互斥锁。
其次,我们来聊一聊synchronized互斥锁的实现原理。J***a虚拟机中,synchronized支持的同步方法和同步语句都是使用monitor来实现的。每个对象都与一个monitor相关联,当一个线程执行到一个monitor监视下的代码块中的第一个指令时,该线程必须在引用的对象上获得一个锁,这个锁是monitor实现的。在HotSpot虚拟机中,monitor是由ObjectMonitor实现,使用C++编写实现,具体代码在HotSpot虚拟机源码ObjectMonitor.hpp文件中。
查看源码会发现,主要的属性有_count(记录该线程获取锁的次数)、_recursions(锁的重入次数)、_owner(指向持有ObjectMonitor对象的线程)、_WaitSet(处于wait状态的线程***)、_EntryList(处于等待锁block状态的线程队列)。
当并发线程执行synchronized修饰的方法或语句块时,先进入_EntryList中,当某个线程获取到对象的monitor后,把monitor对象中的_owner变量设置为当前线程,同时monitor对象中的计数器_count加1,当前线程获取同步锁成功。
当synchronized修饰的方法或语句块中的线程调用wait()方法时,当前线程将释放持有的monitor对象,monitor对象中的_owner变量赋值为null,同时,monitor对象中的_count值减1,然后当前线程进入_WaitSet***中等待被唤醒。
J***a语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。
互斥属性:即每次只能有一个线程占用***。
请求与保持:即已经申请到锁***的线程可以继续申请。在这种情况下,一个线程也可以产生死锁情况,即抱着锁找锁。
不可剥夺:线程已经得到所***,在没有自己主动释放之前,不能被强行剥夺。
循环等待:多个线程形成环路等待,每个线程都在等待相邻线程的锁***。
什么是关键字?有什么特点?
关键字:就是被j***a赋予了特殊含义的英文单词。在editplus编辑器中书写时字体颜色会变。 (1)用于定义权限修饰的关键字 private protected public (2)用来定义类函数变量修饰符的关键字 abstract final static synchronized (3)用来定义类与类之间的关键字 extends implements (4)用来定义建立实例及引用实例,判断实力的关键字 new this super instanceof (5)用于艺术处理的关键字 try catch finally throw throws (6)用于包的关键字 package import (7)其他修饰符关键字 native strictfp transient volatile assert
到此,以上就是小编对于j***a语言关键字的问题就介绍到这了,希望介绍关于j***a语言关键字的2点解答对大家有用。