`
歆渊
  • 浏览: 307472 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java的synchronize机制

阅读更多

java天生丽质, 在诸多方面都有惊世骇俗的创举, 她不仅把面向对象的思想发挥得淋漓尽致, 同时在诸多系统级别的问题解决方案上别出心裁. 这里暂且记下多年来对synchronized机制不断深入感悟的心得, 在后面的设计中惟参.

随着多线程技术的诞生和广泛流传, 线程间同步的问题随之而来. 在线程技术问世之前, 除了面向PC的单进程的DOS, 各种领路的大中小型计算机操作系统早就有了多进程的概念, 而且也发展了自己的进程间通信技术(IPC), 通过IPC在进程间共享资源时, 同样存在同步问题, 这与多线程间的同步是非常类似的, 唯一的差别是多线程共享同一个地址空间, 而多进程分别处在不同的地址空间当中, 只有通过IPC的调用才能把某一块共享内容映射到相同的地址上去. 因为这样的历史因素, 很自然的, 用于多进程间同步的IPC功能, 被稍加修改以后, 甚至原封不动的用来解决线程间的同步问题, 线程同步很容易的找到了它经典,成熟,经历过考验的解决方案. 但是java没有在这个问题上亦步就趋, java的设计者真是个完美主义者, 他想到了更优美的实现方式, 并且SUN给了他实现这个想法的机会. 这个方式就是现在被广泛应用的synchronized关键字. 当然这也是由于有了java本土的多线程支持这个培养基才使得她成为可能, 如果是用于进程间同步, 也很难做到如此优美.

不要小看一个简简单单的关键字, synchronized 省却了POSIX/SYSV IPC中繁复的系统互斥量加锁/解锁调用, WIN32为这个问题发明了临界区, 但那也仅仅从IPC前进了一小步而已. 而且, java作为一个平台, 在虚拟机规范层面上定义了加锁/解锁的操作指令, 但是在java作为程序设计语音的层面上, 她真正的美化,简化了同步机制的表达方式, 而且在使用更简单的同时, 避免了一个绝对比例的互斥资源编程误区和陷阱,  这是一种不言之妙, 连java语音规范本身在提及这个特性时也只是一板一眼的讲述了她的用法和特性, 没有一句的虚夸. 但是这个应用到一个方法体或者一个代码块的关键字, 从根本上消灭了其他程序设计语音中可能的锁定对象但不去及时解锁的错误逻辑, 而这种逻辑在一个判断条件比较复杂的算法里是极容易发生的, 一个程序员在编程时把它作为一个anti-pattern时刻放在脑袋里预警要消耗掉不小的脑力资源, 而正是像这样种种的预警消耗, 降低了C/C++程序员的开发效率, 增加了代码的bug率, 从而拖长了软件的开发维护周期, 降低了软件的可靠性.

分享到:
评论

相关推荐

    java synchronize 线程同步

    Java中的`synchronized`关键字是用于实现线程同步的关键机制,主要目的是解决多线程环境下的数据安全问题。当多个线程访问共享资源时,如果没有适当的同步控制,可能会导致数据不一致或者竞态条件等问题。线程同步...

    Java synchronize底层实现原理及优化

    在 Java 中,synchronize 是一种锁机制,用于控制并发冲突,避免多个线程同时访问同一个资源。synchronize 底层实现原理及优化是 Java 并发编程中一个重要的概念,本文将详细介绍 synchronize 底层实现原理及优化。 ...

    Java对象锁和类锁全面解析(多线程synchronize

    为了提高效率,Java提供了更高级的锁机制,如读写锁(ReentrantReadWriteLock)、显式锁(java.util.concurrent.locks.Lock接口的实现,如ReentrantLock)、条件变量(Condition)等。这些高级锁允许更细粒度的控制...

    synchronized关键字的用法详解

    `synchronized`关键字的实现依赖于Java虚拟机(JVM)的监视器锁(Monitor Lock)机制。每把锁都有一个拥有者(Owner)和一个计数器。当一个线程请求获取锁时,如果锁的计数器为0,则线程可以获取该锁,并成为该锁的拥有者...

    java 线程同步 信号量控制同步

    Java 线程同步控制机制 线程同步是 Java 编程中的一种机制,用于控制多个线程之间的资源访问顺序,以避免线程之间的冲突和数据不一致。线程同步的目的就是避免线程“同步”执行,即让多个线程之间排队操作共享资源...

    java技术储备,如何提升自己

    6. 锁机制:了解 Java 锁的底层实现,包括自旋锁、阻塞锁、可重入锁、偏向锁等。 微服务治理 1. SOA 和微服务:了解 SOA 和微服务的概念和架构。 2. 负载均衡:了解负载均衡的原理和实现机制,例如 LVS、NGINX 等...

    第-章-JAVA多线程优秀文档.pptx

    * synchronize 锁机制:使用 synchronize 关键字来锁定某个对象,以确保线程安全。 * wait() 和 notify() 方法:使用 wait() 方法来使线程等待某个事件的发生,并使用 notify() 方法来唤醒等待的线程。 * Lock 接口...

    学籍管理系统JAVA课程设计

    在JAVA中,可以通过 synchronize 关键字或者使用并发容器如 ConcurrentHashMap 来实现线程安全的数据修改。 再者,学籍变动功能可能包括转学、休学、复学等情况,这些变动需要记录并反映在系统中。设计时应考虑变动...

    synchronize.pdf

    标题 "synchronize.pdf" 和描述 "synchronize详解" 显示该文档专注于Java编程语言中关键字 synchronized 的使用和机制。Synchronized 关键字是Java中用于控制多线程并发访问共享资源的一个核心关键字,确保同一时间...

    java面试题库(非常全面).

    15. **Java性能优化**:代码级别的优化技巧,如避免过度使用 synchronize,理解CPU缓存和内存层次结构对性能的影响。 16. **JUnit测试**:单元测试的概念,如何编写和执行JUnit测试用例,以及Mockito等工具的使用。...

    Java面试思维导图.pdf

    这部分涵盖了Java并发编程的核心概念,比如synchronize和volatile关键字。synchronize用于实现线程同步,确保同一时间只有一个线程可以访问被它保护的代码段。volatile关键字保证线程对变量的可见性,即一个线程对...

    JAVA程序员工作常用英语(细心整理).pdf

    - **synchronize同步发生**:在多线程环境中,确保线程安全的一种机制。 - **void无返回值的**:方法不返回任何值。 - **public公共的**:在面向对象编程中表示任何对象都可以访问的属性或方法。 - **protected保护...

    synchronized用法大全实例

    在Java多线程编程中,`synchronized`关键字是一个至关重要的工具,用于实现线程间的同步,以确保共享资源的安全访问。本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ##...

    java关键字和标识符的使用

    * 用于定义类、函数、变量修饰符的关键字:abstract、final、static、synchronize。这类关键字用于定义类、方法和变量的修饰符。 * 用于定义类与类之间关系的关键字:extends、implements。这类关键字用于定义类之间...

    Java Thin-Client Programming

    - **简单的策略:不进行同步(A Simple Strategy: Don’t Synchronize):**在某些情况下,可以通过设计避免同步,从而简化代码。 - **1.3 深入理解线程(Unpicking Threads)** - **线程状态(Thread States):...

    Java线程/内存模型的缺陷和增强

    为了实现同步,Java提供了synchronize关键字以及object的wait()/notify()机制,可是在简单易用的背后,应藏着更为复杂的玄机,很多问题就是由此而起。 一、Java内存模型 在了解Java的同步秘密之前,先来看看JMM...

    经典java面试题下载

    8. **内存泄漏**:Java虽然有垃圾回收机制,但不当的引用管理仍可能导致内存泄漏,例如静态集合对对象的持有。 9. **PreparedStatement vs Statement**:PreparedStatement预编译SQL语句,提高执行效率并防止SQL...

    JAVA面试常考

    文章目录1.HashMap 和 Hashtable的区别2.StringBuilder 和 StringBuffer的区别3.java垃圾回收机制(GC)5.Java的特性–继承/多态/封装5.1 封装5.2 继承5.3 多态6.super 和 this7. 抽象类和接口的区别 1.HashMap 和 ...

Global site tag (gtag.js) - Google Analytics