共享数据的并发处理
多线程同时并发访问的资源叫做临界资源。
多个线程同时访问对象并要求操作相同资源时分割了原子操作就会出现问题。(原子操作,不可再分的操作)会出现数据的不
一致或数据不完整,为避免这种现象采用对访问的线程做限制的方法。
Synchronized关键字
1.Synchronized修饰代码块(同步代码块),
public void push(char c){
synchronized(this)//只有持有当前对象的锁标记才能访问这个代码块
{
...
}
}
对括号内的对象加锁,只有拿到锁标记的对象才能执行该代码块
2.Synchronized修饰方法
public synchronized void push(char c) {
...
}
对当前对象的加锁,只有拿到锁标记的对象才能执行该方法。
互斥锁机制,利用每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问加了同步的这个资源,没有锁标记
便进入锁池。任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。每个对象的锁只
能分配给一个线程。
注意:构造方法不能Synchronized修饰,静态方法可以用Synchronized修饰(是对类对象加锁,类对象会在反射时讲
到)。抽象方法不能用Synchronized修饰,不影响子类覆盖,子类在覆盖这个方法是可以加Synchronized,也可以不
加Synchronized,所以根据Java不允许写废代码的特点是不能写在一起。
注意:对当前对象加锁,一个代码块或者方法是同步的(Synchronized),当前对象的锁标记没有分配出去时,这个对象的锁
标记为分配时,线程来访问这个代码块,会得到这个对象的锁标记,直到这个线程结束才会释放着个锁标记,其他访问这个代
码块或者是方法线程就会进入这个对象锁池,没有得到当前对象的锁标记,不能访问这个代码块或者方法。当一个线程想要获
得某个对象锁标记而进入锁池,这个线程又持有其他对象的锁标记,这个线程也不会释放其持有的锁标记。
注:方法的Synchronized特性本身不会被继承。
线程因为未拿到锁标记而发生阻塞进入锁池(lock pool)。每个对象都有自己的一个锁池的空间,用于放置等待运行的线
程。由系统决定哪个线程拿到锁标记并运行。
使用互斥锁的注意事项
举例:男孩和女孩例子,每个女孩是一个对象,每个男孩是个线程。每个女孩都有自己的锁池。每个男孩可能在锁池里等待。
class Girl{
public void hand(){
}
public syncronized void kiss(){
}
}
class Boy extends Thread{
public void run(){
}
}
注意:只读不用加同步,只写也不用加同步,只有读写操作兼而有之时才加同步。
注意:在java.io包中Vector 和HashTable 之所以是线程安全的,是因为每个方法都有synchronized修饰。Static 方法可
以加synchronized , 锁的是类对象。但是Vector 是jdk 1.0 的ArrayList 是jdk1.2 所以实际应用还是使用ArrayList。
注意:内同步,外同步,内同步,即,类内的方法加同步(synchronized)修饰,外同步即,在需要控制只能由一个线程进行访
问时,把需要控制的方法写在同步代码块里。
分享到:
相关推荐
针对这种情况,我们只能忽略这部分内容,而无法从这里提取与标题“java核心技术卷二”和描述“java核心技术第二卷 高级特性 提供给大家学习与交流”相关的知识点。由于缺少可读和可理解的内容,我们无法对这部分进行...
2. **题库丰富**:系统内置了大量的历年真题和模拟题,覆盖了Java二级考试的所有知识点,让考生全面复习。 3. **自动评分**:完成模拟试题后,系统会立即给出分数和解析,帮助考生了解自己的薄弱环节。 4. **错题...
了解Java的应用。 考试内容: 一、 Java语言的特点和实现机制 二、 Java体系结构 1. JDK目录结构。 2. Java的API结构。 3. 开发环境设置。 4. Java程序结构。 三、 Java语言中面向对象的特性。 1. 面向对象编程的...
了解了这些基本概念后,我们可以编写一个完整的Java程序,该程序接受用户输入的十进制数和目标进制,然后输出转换后的结果。在实际开发中,你可能还会遇到将二进制、八进制或十六进制字符串转换回十进制的情况,这...
《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...
了解Java 语言 了解Java 程序的类型 掌握Java 程序运行环境的配置 理解Java 虚拟机 (JVM) 了解Java的特点
Java入门的基础资料,了解Java 语言 ; 了解Java 程序的类型 ; 掌握Java 程序运行环境的配置 ; 理解Java 虚拟机 (JVM); 了解Java的特点
这个"中控Java二次开发demo"提供了使用Java语言进行中控考勤系统开发的示例代码和指南,对于需要进行此类开发的程序员来说是极其有价值的资源。 1. **中控考勤系统**:中控考勤系统通常集成了指纹识别、面部识别等...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
通过阅读《Java核心技术 第12版》,读者不仅能掌握Java语言的基本语法和核心概念,还能了解高级特性并提升实际编程技能。这本书不仅适合自学,也适合作为大学或专业培训课程的教材,旨在帮助读者成为一名熟练的Java...
程序设计语言 了解Java平台特性 了解Java集成开发环境 使用Eclipse开发Java应用 了解Java程序结构组成 常见问题
Java 汇总学习简介 Java 作为一种广泛使用的高级编程语言,其学习涵盖了许多方面。在深入探讨之前,我们先来了解一下 Java 的基本课程,包括 SL110、SL275 和 SL285,这些课程通常由 SUN 公司提供,旨在帮助初学者...
在Java二次开发过程中,你需要了解以下几个核心知识点: 1. **设备通信协议**:中控考勤机通常使用特定的通讯协议与服务器进行数据交换,例如TCP/IP、UDP或串口通信。Java Demo中会展示如何使用这些协议建立连接,...
Java面试通常涵盖多个...并发编程:了解Java中的线程、同步、锁等机制,以及Java并发包中的工具类。 JVM与性能调优:对Java虚拟机(JVM)有一定了解,包括内存管理、垃圾回收等方面,并知道如何进行基本的性能调优。
14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合...
Java还提供了丰富的API,如Swing和JavaFX用于构建图形用户界面,JDBC用于数据库操作,以及近年来热门的Java EE技术,如Servlet、JSP、EJB等,用于开发企业级应用。 此外,书中还会涉及Java的内存管理,包括垃圾收集...
在Java基础学习的第二天,主要涵盖了以下几个重要知识点:计算机组成原理,DOS命令,进制转换,Java的发展历程,Java的三大平台,Java运行核心机制,JDK的安装与环境变量配置,以及Java的基本语法。 首先,计算机...
本资源包含几十个精心设计的Java简历模板,旨在帮助这个阶段的程序员更好地突出自己的专业能力,提高面试机会。 这些简历模板通常会涵盖以下几个关键部分: 1. **基本信息**:包括姓名、联系方式(电话、邮箱)、...