最近正在阅读Java ReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。...基础知识 Java多线程的wait()方法和notify()方法 这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException...可重入锁 接下来,我们设计一种可重入锁 ? 所谓可重入,意味着线程可以进入它已经拥有的锁的同步代码块儿。...可重入锁的概念和设计思想大体如此,Java中的可重入锁ReentrantLock设计思路也是这样
最近正在阅读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
可通过CAS来实现原子操作 CAS(Compare and Swap): CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值...CAS主要通过compareAndSwapXXX()方法来实现,而这个方法的实现需要涉及底层的unsafe类 unsafe类:java不能直接访问操作系统底层,而是通过本地方法来访问。...这就是可重入锁的特点。...java中常用的可重入锁 synchronized java.util.concurrent.locks.ReentrantLock AtomicIntegerFieldUpdater:原子更新整型的字段的更新器...可以原子更新一个布尔类型的标记位和应用类型 AtomicIntegerArray :原子更新整型数组里的元素 AtomicLongArray :原子更新长整型数组里的元素 AtomicReferenceArray
flock64 fl; // l_start从文件头开始计算偏移值 fl.l_whence = SEEK_SET; // 设置被加锁的长度 if (size == (jlong)java_lang_Long_MAX_VALUE...总结:lock()与tryLock的区别在于,lock会阻塞调用Native API为F_SETLKW64;tryLock为非阻塞,调用Native API为F_SETLK64;锁与文件关联,而不是线程和通道...2.可中断的通道 总结:可中断的通道((Interruptible)实现InterruptibleChannel接口,可以被异步关闭(即另外线程调用该线程的的interrupt()方法);实现原理即文中的标记...I/O开始的begin()和标记I/O结束的end()。...六、参考资料 《Java NIO》
什么是可重入锁,什么是不可重入锁,它们是如何实现的?...定义 可重入锁:当线程获取某个锁后,还可以继续获取它,可以递归调用,而不会发生死锁; 不可重入锁:与可重入相反,获取锁后不能重复获取,否则会死锁(自己锁自己)。 不可重入锁 用代码说话。...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
可重入锁是什么?...ReentrantLock就是把可重入锁 package com.javaliao.backstage; import java.util.concurrent.locks.Lock; import...java.util.concurrent.locks.ReentrantLock; class Phone implements Runnable{ Lock lock = new ReentrantLock
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 和桌面应用。
在9月16日与OpenWorld共同举办的CodeOne会议上,甲骨文宣布Java SE 13(JDK 13)的全面上市,为开发人员提供了可以提高生产率和效率的新功能。...“甚至有人担心Java 10和Java 11可能根本没有功能,并且往后看,很难夸大快速发布节奏已经带来的重大变化。” Goetz说,每年发布多个版本意味着可以将更多功能交付给开发人员。...根据Goetz的说法,没有文本块,如果开发人员想要将HTML Web代码引入Java,则需要使用一些额外的步骤和代码字符串,这些步骤既混乱又容易出错。...日积月累,相对比较旧的版本也会有很大的更新和特性,对比一下,java13 对于 java8来说有很多大的功能和特性更新。...现在oracle的java版本策略是快速发布版本,小的功能的更新能快速发布新版让用户体验到,所以大家多关注Jave每次版本更新,以发现和尝试使用对自己有用的功能。
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...嗯 虽然大部分菜鸟驿站的照抄大半,但有自己的理解和注入,所以原创吧原创吧。
.*; import java.awt.event.ActionEvent; public class JToolBarTest { JFrame jf = new JFrame("测试工具条...Swing提供了JColorChooser和JFileChooser这两种对话框,可以很方便的完成颜色的选择和本地文件的选择。....*; import java.awt.event.ActionEvent; public class JColorChooserDemo { JFrame jFrame = new JFrame....*; import java.awt.event.ActionEvent; public class ConfirmDialogTest { JFrame jf = new JFrame....*; import java.awt.event.ActionEvent; public class OptionDialogTest { JFrame jf = new JFrame("
JFrame jFrame = new JFrame("兮动人-贪吃蛇小游戏"); // 设置界面大小 jFrame.setBounds(10,10,900,720...面板 JPanel 可以加入到JFrame jFrame.add(new GamePanel()); // 让窗口能够展现出来 jFrame.setVisible...GamePanel:游戏控制面板 package com.xdr630.snake; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent...; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener...实现效果 完成后也可打成 jar 包,使用终端执行 java -jar xxx.jar 运行,效果和idea运行效果一样,方便移动。
苹果和微软是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包。
一、JFrame窗口 代码演示: package com.zibo.lession04; import javax.swing.*; import java.awt.*; public class...extends Frame JFrame jFrame = new JFrame("TestJFrame"); jFrame.setBounds(300,300,500,500...); } } 运行结果: 三、Icon和ImageIcon标签 1、Lable new Lable("XXX"); 2、Icon 代码演示: package com.zibo.lession04...; import javax.swing.*; import java.awt.*; public class TestIcon extends JFrame implements Icon {....*; import java.net.URL; public class TestImageIcon extends JFrame { public TestImageIcon() throws
; import java.awt.GraphicsEnvironment; import java.awt.Insets; import java.awt.Point; import javax.swing.JFrame...方法区别与JFrame中的setState()和getState()方法 */ public AHFBodyState getStates() { return state; } /*...frame.setHiddenPoint(hiddenPoint); frame.setStates(AHFBodyState.CANHIDD); System.out.println("进入可隐藏区域...// 如果不可以隐藏,那就是离开了边缘了 if (frame.getStates() == AHFBodyState.CANHIDD) { System.out.println("离开可应藏区域...; import java.awt.Point; import java.awt.event.ComponentListener; import javax.swing.JFrame;
static void main(String[] args) { //创建窗体对象 JFrame frame = new JFrame();....*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent...; import java.awt.event.KeyListener; import java.io.BufferedInputStream; import java.io.IOException;...Mpanel(){ //加载图片元素 loadImages(); //初始化数据 initSnake(); //设置聚焦...if(isStart){ bgm.loop(Clip.LOOP_CONTINUOUSLY); } //未开始和暂停则不播放背景音乐
Java Swing是Java GUI编程库的一部分,提供了丰富的组件和布局管理器来构建桌面应用程序。在Swing中,JFrame、JPanel和JButton是构建用户界面的基础组件。...示例代码 import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.event.ActionEvent...; import java.awt.event.ActionListener; public class JButtonExample { public static void main(String...结语 JFrame、JPanel和JButton是构建Swing应用程序的基础。理解它们的工作原理,注意常见的设计模式和错误,可以帮助你创建出功能丰富的用户界面。...在实践中,结合不同的布局管理器和组件,你可以构建出各种复杂的界面。
; import java.awt.FlowLayout; import java.awt.Font; import java.awt.LayoutManager; import javax.swing.JFrame...; import java.awt.Color; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame...获得文本框的首选大小 void scrollRectToVisible(Rectangle r) 向左或向右滚动文本框中的内容 void setColumns(int columns) 设置文本框最多可显示内容的列数...; import java.awt.Dimension; import java.awt.Font; import javax.swing.JButton; import javax.swing.JFrame...; import java.awt.Dimension; import java.awt.Font; import javax.swing.JButton; import javax.swing.JFrame
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
java.util.Vector; public class ListTest { JFrame mainWin = new JFrame("列表框测试"); String[] books...import java.util.List; public class ListModelTest { JFrame mainWin = new JFrame("测试ListModel");...0.1,1.2,0.1)); JTextField showVal = new JTextField(10); public void init(){ //JList可视高度可同时显示四个列表项...showVal.getText()+bigDecimal.toString()+", "); } } }); //设置下拉列表的可视高度可显示...; import java.awt.event.ActionListener; public class DefaultListModelTest { JFrame mainWin = new
领取专属 10元无门槛券
手把手带您无忧上云