Threads are running in the same application,they share the same memory space in the computer.this allows them to share information seamlessly.
Synchronized关键字在语法上有两种形式:作用于程序块和方法
块同步需要一个参数来表明锁住的是哪个对象,这种方式使得任何一个方法都可以锁住任何一个对象,同步块最常用的参数就是this。
Synchronized关键字不属于方法签名的一部分,所以当子类覆盖父类方法时,Synchronized修饰符不会被继承。因此接口中的方法不能被声明为Synchronized,同样地,构造函数不能被声明为Synchronized。
线程实现取消最常见的方法都依赖于每个线程的中断状态,中断状态可以通过调用Thread.interrupt来设置,调用Thread.isInterrupted来查询,调用Thread.interrupted来查询并清除。
在Object.wati,Thread.join.,Thread.sleep中,中断状态检测是自动执行的,这些方法在遇到中断时,会抛出InterruptedException异常以中断当前的操作,使得线程可以被唤醒并执行取消操作。
正如每个Object都有一个锁,每个Object也有一套等待集合(wait set),他由wati,notify,notifyAll和Thread.interrupt方法来操作。每个对象的等待集合都是维护在JVM内部的,等待集合一直保存着那些因调用对象wait方法而被阻塞的线程,直到接受到相应的通知或者该等待集合被释放。由于等待集合和锁之间的交互机制,只有获得对象的同步锁时,才可以调用他的wait,notify,notifyAll的方法。
wait方法被调用后,会执行如下操作:
1.如果当前线程已被中断,那么该方法立即退出,然后抛出一个InterruptedException异常,否则,当前线程被阻塞。
2.JVM把该线程放入目标对象内部且无法访问的等待集合中
3.目标对象的同步锁被释放,但是这个线程所拥有的其他锁依然被这个线程保留着。
notify方法被调用后,会执行如下操作:
1.如果存在的话,JVM从目标对象内部的等待集合中任意地移除一个线程T,如果等待集合中的线程数大于1,那么哪个线程被选中完全是随机的。
2.线程T必须重新获得目标对象的目标锁,这必然导致他将被阻塞直到调用Thread.notify的线程释放该同步锁。如果其他线程在线程T获得此锁之前就获得它,那么线程T就要被一直阻塞下去。
3.线程T从执行wait的那点恢复执行
notifyAll方法被调用后,会执行如下操作:
notifyAll方法调用后执行的操作同notify类似,不同的只是等待集合中所有的线程同时都要执行那些操作,然而,由于他们必须要先获得目标对象的同步锁,所以只有一个线程可以继续操作。
interrupt方法被调用后,会执行如下操作:
如果对一个因调用了wait而被挂起的对象调用Thread.interrupt方法,那么这个方法的执行机制就和notify类似,只是在重新获得对象锁后,该方法就会抛出InterruptedException异常,并且该线程的中断状态将被设置为false.如果interrupt和notify同时发生,那么哪个操作会被执行完全是随机的,所以两种结果都是有可能的。
- 大小: 322.8 KB
分享到:
相关推荐
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,从而提升系统效率。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。下面是对Java多线程学习的详细解析。 1. **多线程概述*...
根据提供的文件信息,我们可以归纳出以下关于Java多线程的经典示例中的关键知识点: ### Java多线程实现方式 在Java中,实现多线程有两种主要的方法:通过继承`Thread`类或者实现`Runnable`接口。 #### 继承...
Java多线程编程详解[归纳].pdf
总之,“JAVA多线程设计模式详解”全面介绍了Java多线程技术,从基础知识到高级设计模式,为读者提供了扎实的理论基础和实践经验,有助于提升Java多线程编程的能力。通过学习和实践书中的内容,开发者能够更好地应对...
Java的“八股文”通常指的是Java开发者在面试中常被问到的一系列...压缩包文档是对Java八股文的详细归纳,包含基础知识、集合框架、多线程与并发、Java虚拟机(JVM)、Java Web开发、Java框架与技术栈、其他相关知识。
本篇将详细解释如何使用Java多线程来实现火车售票系统,并探讨Java中同步的实现,包括同步块(synchronized block)和同步方法(synchronized method)。 首先,火车售票系统的模拟通常是为了演示线程间的协作和...
Java 实现多线程的网络并发服务器是一种高效且灵活的软件设计方法,广泛应用于现代的互联网服务中。本文档将详细解析如何利用Java语言构建这样的系统,并探讨其实现原理和设计思路。 首先,多线程在网络并发服务器...
- **多线程**:Java内置了对多线程的支持,允许同时执行多个线程,提高了程序的并发性能和响应速度。 - **动态性**:Java是一种面向网络的语言,支持远程过程调用(RPC)和动态加载类等功能,使得应用可以动态扩展...
14. Java多线程:Java提供了多线程编程的能力,使得程序可以同时执行多个任务。Thread类是创建线程的基石,通过继承Thread类或实现Runnable接口可以创建新的线程。sleep()方法是让线程暂停执行的常用方法。 15. ...
7. **多线程**:Java内置了对多线程的支持,可以通过实现Runnable接口或继承Thread类来创建线程。线程同步机制(如synchronized关键字、wait/notify、Lock接口)用于解决并发问题。 8. **反射**:Java反射机制允许...
此外,笔记可能还包括异常处理、集合框架、IO流、多线程、网络编程等内容。 2. **MySQL数据库**: MySQL是一种关系型数据库管理系统,广泛用于Web应用程序。笔记中关于MySQL的知识点可能包括SQL语法(SELECT, ...
6. **支持多线程**:Java原生支持多线程编程,允许多个线程并发执行,提高了程序的执行效率和响应速度。 #### 二、面向对象与面向过程的区别 1. **面向过程**:主要关注的是解决问题的步骤,通过一系列的函数来...
4. **Java多线程教学演示系统**:这个系统可能包含了各种多线程示例,如生产者消费者模型、线程池的应用、线程同步与互斥的案例,以及死锁和活锁的演示,帮助学习者理解和实践多线程编程。 5. **总结与展望**:这...
**Java多线程**是Java编程的重要组成部分,它允许程序同时执行多个任务。在上述单例模式的例子中,多线程环境暴露了懒汉式单例的线程安全问题。多线程环境下,如果没有适当的同步控制,可能会导致多个线程创建多个...
5. **多线程**:线程的创建(通过实现Runnable接口或继承Thread类)、同步机制(synchronized关键字、wait()、notify()、notifyAll()方法)、死锁的概念及避免方法。 6. **内存管理**:理解垃圾收集机制,JVM内存...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。这份"java重点知识归纳.pdf"文档概述...随着经验的积累,还会接触到类、对象、包、接口、异常处理、IO流、多线程、网络编程等更高级的概念。
10. **其他知识点**:这包括一些未系统分类但常见的Java知识,如字符串操作、IO流、网络编程、多线程等。 总的来说,对于Java新手,建议从这些基础知识点入手,逐步深入学习。同时,理论知识与实践相结合,通过编写...
本文主要探讨了如何通过使用Java的`RandomAccessFile`类在Android中实现多线程下载。 首先,多线程下载的基本原理是将大文件分割成多个小部分,每个线程负责下载其中一个部分,然后将这些部分合并成完整的文件。...
本篇讲解主要围绕Android中的多线程应用,基于Java的多线程基础进行展开。 1. **为什么要使用多线程?** a) **提高用户体验/避免ANR**:在Android中,主线程(也称UI线程)负责处理用户界面的更新和事件响应。...