如果你在大学学习过操作系统,你可能还记得监听器在操作系统中是很重要的概念。同样监听器在java同步机制中也有使用,本文通过类比的方法来解释“监听器”的基本思想。
什么是监听器?
监听器可以看成是包含了一间特殊房间的建筑,这间特殊的房间在同一个时间只能被一个客人(线程)拥有,通常这间房间包含了一些数据和代码。
如果一个客人想拥有这间特殊的房间,他不得不首先在走廊(进入集)中等待着,然后调度器根据一些调度算法(eg:FIFO 先进先出)选择一个。如 果这个客人因为某些原因暂停悬挂着,则会被放到等待房间`,同时也被安排稍后重新进入这个特殊的房间,就像上面图片所展示的那样,在这个建筑里有个3个房 间。
简而言之:一个监听器就是一个监听线程进入这间特殊房间的设施。它确保了只能有一个线程可以访问这些受到保护的数据和代码。
在java中监听器是如何实现的?
在java虚拟机中,每个对象和类在逻辑上都和一个监听器相关联。为了实现监听器的共同执行能力,锁(有时候又叫互斥量)关联着每个对象和类,在操作系统书上被称之为“信号量”,互斥量其实就是一个二态的信号量。
如果一个线程拿到了相关数据的锁,那么其他线程不能再拥有这把锁直到拥有这把锁的线程释放了这把锁。当在多线程编程中,如果我们需要一直写一个信号量这种方式可能会不太方便,幸运的是我们没必要这么做,因为JVM(java虚拟机)已经自动帮我们做了。
声明一个监听器区域,这意味着数据不能被超过一个线程访问(译者注:同时访问的前提)。Java提供了同步的语句和同步的方法,一旦代码嵌入到同步关键字内,这就是一个监听器区域。而锁是由jvm在底层自动实现的。
在java同步代码中,哪部分才是监听器?
我们知道每个对象/类都关联着一个监听器,我觉得这么说好点,每个对象都拥有一个监听器,因为每个对象都有它关键的区域和监听线程队列的能力。
为了使不同线程能相互合作,java提供了wait()和notify()方法来暂停一个线程和唤醒分别等待访问这个对象的其他线程中的一个,另外还有3个其他版本:
wait(long timeout, int nanos)
wait(long timeout) notified by other threads or notified by timeout.
notify(all)
|
这些方法只能在一个同步语句或者同步方法内调用,原因是因为如果一个方法不要求互斥,那么就没有必要在线程间监听或者是合作,每个线程都可以自由访问这个方法。
相关推荐
通过注册`Statement`或`PreparedStatement`的监听器,我们可以捕获到SQL语句的执行过程。然而,Java标准库并没有提供直接的API来监听数据库变化。开发者通常需要自己实现一套机制,比如定期查询某个特定的审计表,以...
Java的AWT和Swing库提供了事件监听器接口,允许程序员注册回调函数来处理这些事件。在聊天器中,可能有监听键盘输入、点击发送按钮等事件的处理逻辑。 5. **数据序列化**: 为了在网络上传输文本消息,Java中的...
**JAVA窗体抢答器详解** Java窗体抢答器是一种基于Java编程语言设计的应用程序,主要用于实现多人之间的在线竞赛答题场景。它通常由两部分组成:服务器(Server)和客户端(Client)。服务器负责管理比赛规则、接收...
在Java中,可以通过安全管理器(SecurityManager)来实施细粒度的权限控制,限制程序对某些系统资源的访问,防止被恶意绕过。 5. **用户界面设计**: 锁屏软件通常包含用户登录界面,用户需要输入正确的密码才能解锁...
在这个主题中,我们主要关注的是如何通过Java和JavaScript来实现这一功能,特别是与“easyclick”相关的技术应用。 首先,"easyclick"通常指的是一个简化用户点击事件处理的库或框架。在Android开发中,它可能被...
2. **事件监听器**:在GUI编程中,事件监听器用于捕捉用户操作,如点击按钮。开发者会为JButton添加ActionListener,当用户点击时执行相应的密码验证逻辑。 3. **密码验证**:为了实现密码验证,开发者可能会使用...
对于U盘锁,还需要监控文件系统的变动,这部分可能使用Java的`java.nio.file`包,尤其是`WatchService`接口,来监听文件系统事件。 7. **异常处理和日志记录**: 为了确保软件的稳定性和可维护性,开发过程中会...
- **类与对象**: Java是面向对象的语言,程序通常由类定义,通过实例化对象来操作。 - **主类与main方法**: 执行Java程序时,会从包含`main`方法的类开始。锁屏工具的启动点可能就是这样的一个主类。 2. **图形...
3. **加载与执行**:通过Java虚拟机(JVM)加载字节码并解释执行。 #### 1.3 Java目录结构 Java开发环境通常包括以下几个关键目录: - **src**:存放源代码。 - **bin**:存放编译后的字节码文件。 - **lib**:存放...
它们通常指的是锁或者监视器对象,如`synchronized`关键字所实现的。当一个线程访问特定对象的`synchronized`方法或块时,其他试图访问该对象的线程会被阻塞,直到第一个线程完成其操作。这是避免并发编程中的数据...
Java简单聊天器模拟是一个基于网络通信的项目,主要利用了Socket编程来实现客户端与服务器端的交互。在本文中,我们将深入探讨这个项目的核心概念、技术实现和应用场景。 首先,我们要理解Socket的基本概念。Socket...
因此,理解 Java 多线程的概念,如线程同步、锁机制是必不可少的。 6. **日志记录**:在开发过程中,日志记录可以帮助调试和追踪问题。熟悉 Java 的日志库,如 Log4j 或 SLF4J,可以有效地记录程序运行过程中的信息...
Java是世界上最流行的编程语言之一...这些知识点覆盖了Java的基础语法、异常处理、多线程、对象和类、布局管理器等方面,对于学习和理解CoreJava至关重要。通过解答这些试题,学生可以巩固和提升对Java核心概念的理解。
此外,如果你正在开发Swing或JavaFX这样的GUI应用,还可以利用事件驱动模型,通过事件监听器来实时响应进度变化。例如,在Swing中,可以使用SwingWorker类,它提供了方便的方法来处理后台任务和进度更新。 总之,...
14. **Java EE技术**:Servlet、JSP、过滤器、监听器等,是构建Web应用的基础。 15. **测试**:JUnit、Mockito等单元测试工具的使用,以及TDD(Test-Driven Development)的概念。 以上知识点只是冰山一角,"java...
5. 事件处理:Java Applet程序中,处理事件通常需要导入`java.awt.event`包,以便使用事件监听器。 6. 布局管理器:Panel和Applet默认使用`FlowLayout`布局,它按照从左到右,从上到下的顺序放置组件。 7. 类型...
- 事件监听器(如ActionListener)用于响应用户的操作,例如点击按钮时触发消息发送。 7. 安全性: - Java Applet的安全模型限制了它们对本地系统的访问,以防止恶意代码。这在聊天室应用中意味着用户信息的安全...
为了解决并发修改的问题,一种解决方案是在迭代期间获取并持有对监听器列表的锁,但这可能导致其他线程阻塞。另一种方法是在触发事件时,先复制一份监听器列表,再遍历副本,但这会增加内存开销和复制操作。使用迭代...