首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java不可重入锁和可重入锁理解

最近正在阅读Java ReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。...基础知识 Java多线程的wait()方法和notify()方法 这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException...可重入锁 接下来,我们设计一种可重入锁 public class Lock{ boolean isLocked = false; Thread lockedBy = null;...= 0){ isLocked = false; notify(); } } } } 所谓可重入...可重入锁的概念和设计思想大体如此,Java中的可重入锁ReentrantLock设计思路也是这样 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153238.html

47210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    探索JAVA并发 - 可重入锁和不可重入锁

    可通过CAS来实现原子操作 CAS(Compare and Swap): CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值...CAS主要通过compareAndSwapXXX()方法来实现,而这个方法的实现需要涉及底层的unsafe类 unsafe类:java不能直接访问操作系统底层,而是通过本地方法来访问。...这就是可重入锁的特点。...java中常用的可重入锁 synchronized java.util.concurrent.locks.ReentrantLock AtomicIntegerFieldUpdater:原子更新整型的字段的更新器...可以原子更新一个布尔类型的标记位和应用类型 AtomicIntegerArray :原子更新整型数组里的元素 AtomicLongArray :原子更新长整型数组里的元素 AtomicReferenceArray

    81221

    探索JAVA并发 - 可重入锁和不可重入锁

    什么是可重入锁,什么是不可重入锁,它们是如何实现的?...定义 可重入锁:当线程获取某个锁后,还可以继续获取它,可以递归调用,而不会发生死锁; 不可重入锁:与可重入相反,获取锁后不能重复获取,否则会死锁(自己锁自己)。 不可重入锁 用代码说话。...throws InterruptedException { Thread thread = Thread.currentThread(); // wait()方法一般和while...基于自旋锁实现可重入锁 直接用上个例子的代码改一下: import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantLock...ReentrantLock ReentrantLock是Java中很常见的工具类, 从名字就可以看出,它是个可重入锁,用法也很简单: import java.util.concurrent.locks.ReentrantLock

    2.9K41

    Java GUI 框架如何选择?

    Java 提供了多种 GUI 框架,如 Swing、SWT、AWT、SwingX、JGoodies、JavaFX、Apache Pivot 和 BeautyEye。...Swing 提供了比 AWT 更丰富的组件和功能,它不依赖于本地操作系统,而是完全基于 Java 实现的,具有很好的跨平台性。...它的组件更加灵活,可自定义外观。 3. SWT(Standard Widget Toolkit) SWT 由 Eclipse 团队开发,是一个高性能的 GUI 框架。...JavaFX JavaFX 是近年来 Java GUI 开发的首选技术之一。它比 Swing 和 SWT 更现代,支持丰富的图形和媒体处理,适合构建现代化的用户界面。...Apache Pivot Apache Pivot 是一个基于 Java 的开源平台,专注于开发富客户端应用程序。它的 API 类似于 Swing,但更轻量级,支持 Web 和桌面应用。

    86610

    Java没有创新了吗?Java 13提供可提高生产率和效率的功能

    在9月16日与OpenWorld共同举办的CodeOne会议上,甲骨文宣布Java SE 13(JDK 13)的全面上市,为开发人员提供了可以提高生产率和效率的新功能。...“甚至有人担心Java 10和Java 11可能根本没有功能,并且往后看,很难夸大快速发布节奏已经带来的重大变化。” Goetz说,每年发布多个版本意味着可以将更多功能交付给开发人员。...根据Goetz的说法,没有文本块,如果开发人员想要将HTML Web代码引入Java,则需要使用一些额外的步骤和代码字符串,这些步骤既混乱又容易出错。...日积月累,相对比较旧的版本也会有很大的更新和特性,对比一下,java13 对于 java8来说有很多大的功能和特性更新。...现在oracle的java版本策略是快速发布版本,小的功能的更新能快速发布新版让用户体验到,所以大家多关注Jave每次版本更新,以发现和尝试使用对自己有用的功能。

    52831

    Java没有创新了吗?Java 13提供可提高生产率和效率的功能

    在9月16日与OpenWorld共同举办的CodeOne会议上,甲骨文宣布Java SE 13(JDK 13)的全面上市,为开发人员提供了可以提高生产率和效率的新功能。...“甚至有人担心Java 10和Java 11可能根本没有功能,并且往后看,很难夸大快速发布节奏已经带来的重大变化。” Goetz说,每年发布多个版本意味着可以将更多功能交付给开发人员。...根据Goetz的说法,没有文本块,如果开发人员想要将HTML Web代码引入Java,则需要使用一些额外的步骤和代码字符串,这些步骤既混乱又容易出错。...日积月累,相对比较旧的版本也会有很大的更新和特性,对比一下,java13 对于 java8来说有很多大的功能和特性更新。...现在oracle的java版本策略是快速发布版本,小的功能的更新能快速发布新版让用户体验到,所以大家多关注Jave每次版本更新,以发现和尝试使用对自己有用的功能。

    51650

    java swing入门教程_java swing基础(菜鸟教程学习)

    Java Swing介绍 1.Swing是一个为java世纪的GUI工具包 2.Swing是JAVA基础类的一部分 3.Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表 4个器件...AWT是JFC的一部分,支持可更换的面板和主题(各种操作系统默认的特有主题),然而并不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。...JFrame java的GUI程序的基本思路是以JFrame为基础,说白了就是窗体屏幕它是屏幕上window的对象,能够最大化,最小化,关闭。...JPanel java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,是一种轻量级容器,可以加入到JFrame...嗯 虽然大部分菜鸟驿站的照抄大半,但有自己的理解和注入,所以原创吧原创吧。

    2.6K20

    Java进阶08 GUI

    苹果和微软是GUI方面的先驱(虽然他们都一定程度上抄袭了Xerox),GUI也为这两位PC王者带来了丰厚的市场回报。 ? 早期Mac GUI GUI需要操作系统和硬件的支持。...Java的GUI编程有相对比较好的可移植性。然而,随着GUI的重心向移动端转移,Java的GUI部分地位有些尴尬。无论如何,我们还是可以通过Java来了解GUI编程的一些基本内容。...不同的对象之间有组合(composition)关系,比如 窗户和门属于房子,而把手属于门。乌龟和房子是相互独立的两个对象。...此外,整个图像外有一个方框,用来表明可绘图的范围,所有上面提到的元素都依附于该方框。 另一方面,上述的对象有许多重复使用的图形元素(component)。比如把手是一个圆,房子和门由直线构成。...一个简单的GUI Java的GUI功能主要集中在awt和swing两个包中。awt是GUI底层包。swing包是高层的封装,更容易移植。这里将更侧重于swing包。

    1.8K70

    JAVA学习中Swing部分JDialog对话框窗体的简单学习

    package com.swing; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent...窗体时Swing组件中的对话框,  * JDialog的功能就是是从一个窗体中弹出另一个窗体,就像是在使用浏览器时弹出的确定对话框一样  *  * 2:JDialog窗体和JFrame窗体类似,在使用时也需要调用...; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;...{     public void MyFrame(){         JFrame jf=new JFrame();//实例化一个JFrame对象         Container container...MyFrame();         fm.MyFrame();     } } class MyJDialog extends JDialog{     //本实例代码可以看到,JDialog窗体和JFrame

    1.8K70
    领券