连接:
http://tutorials.jenkov.com/java-concurrency/synchronized.html
这个人的文章写的相当的清楚,
部分章节的总结:
Starvation and Fairness:
由于调度的不公平性,某线程可能得到较少的执行机会,甚至得不到执行的机会,这种情况叫做starvation.
解决的方式是:线程在锁上排队,唤醒的时候,按照排队的顺序来唤醒,就解决了不公平的问题(具体的实现有比较多的细节,我还没有仔细读)
Nested Monitor Lockout:
lock过程:就是在拿到上次lock之后,继续lock内层的lock,
而unlock的时候,也是先拿上层的lock,然后拿内层的lock,然后notify。
导致的结果是,lock在wait在内存的object的时候,只释放了内层object的锁,而继续持有外层object的锁。 unlock过程,在想拿到外层object的锁的时候拿不到,造成了永远不能notify的问题。和死锁类似。
Slipped Conditions:
一个常见的错误,一个线程check一个条件的时候,根据check的结果做一件事情。但是check之后,这个条件被另外的线程改变,导致的结果是check失效
Locks:
lock的来源:由sychronized关键字实现,提供更强的功能。
这里面有一个哲学:就是执行速度快的语句可以放在sychronized里,lock的实现也是利用这一点。(我推测是因为sychonized锁,会busy waiting,也就是说,如果sychronized拿不到锁的话,会不停的retry,消耗CPU的资源,相对较快执行的语句,busy waiting消耗很少的CPU计算能力)。lock利用wait,消除busy waiting,节省CPU资源。
ReenterLock,是说的已经拿到一个对象的锁,然后再次进入的,也是没问题的。
FairLock,synchronizde的锁并不是公平的,通过排队队列,实现公平的唤醒
可以跟UNIX的mutex+condition对比,sychroinzed关键词,相当于mutex和condtion这些原始材料,Lock则是通过这写原始材料组合成的可用工具。
分享到:
相关推荐
Java并发性和多线程是Java开发中至关重要的概念,它们涉及到如何在单个或多个处理器上同时执行程序的不同部分,从而提升程序的效率和响应速度。在这个领域,Java提供了丰富的工具和API,使得开发者能够有效地管理和...
资源名称:Java 并发性和多线程资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
在Java编程中,多线程并发是...总之,Java的多线程并发实例可以帮助我们更好地理解和实践线程控制、同步机制以及经典的设计模式,提升我们的编程能力。通过不断学习和实践,我们可以编写出高效、安全的多线程并发程序。
本篇文章将深入探讨Java中的多线程并发机制,并通过具体的示例来帮助读者更好地理解和掌握这一重要概念。 #### 二、为什么需要多线程? 多线程技术的存在主要解决了计算机系统中资源利用率低下的问题。在没有多...
Java提供了多种同步机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`接口(包括`ReentrantLock`等)来避免竞态条件和死锁的发生,确保共享数据在多线程环境下的正确性。...
Java并发编程和多线程是两个紧密相关的概念,但它们之间存在着重要的区别。并发编程是一种高级的编程范式,旨在设计能够处理多个任务并行执行的程序,从而提高系统效率和资源利用率。它涵盖了一系列的技术和策略,如...
在Java并发编程中,还涉及到多种并发工具类,例如同步容器类和并发容器类。同步容器类使用同步锁来保证线程安全,但可能会影响性能。并发容器类ConcurrentHashMap和CopyOnWriteArrayList等,采用细粒度的锁和弱一致...
`volatile`关键字则确保了多线程环境下的变量可见性,保证了线程之间的数据一致性。此外,从Java 1.5开始,还引入了`java.util.concurrent`包,包含了许多更高级的并发工具,如`ConcurrentHashMap`、`BlockingQueue`...
通过以上方法,我们可以在Java中有效地利用多线程处理数据库数据,提高程序的并发能力和效率。记得在设计时充分考虑线程间的协作与同步,以及数据库连接的管理和优化,以确保程序的稳定性和性能。
《Java并发编程实践》(JCIP)是一本深入讲解Java并发的经典书籍,其附带的示例代码可以帮助读者更好地理解和应用多线程技术。通过阅读这些示例,可以深入理解并发设计模式,如生产者-消费者模型、双端队列、线程池...
### Java多线程分页查询知识点详解 #### 一、背景与需求分析 在实际的软件开发过程中,尤其是在处理大量数据时,如何高效地进行数据查询成为了一个关键问题。例如,在一个用户众多的社交平台上,当用户需要查看...
Java并发多线程是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类、`Runnable`接口以及`ExecutorService`来实现。下面我们将深入探讨...
C++的多线程支持则依赖于C++11及更高版本引入的`<thread>`库。开发者可以使用`std::thread`类创建和管理线程。与JAVA不同,C++中的线程对象并不直接执行任务,而是将可调用对象(如函数、函数指针或lambda表达式)...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
《Java并发编程实践》是一本深入探讨Java多线程编程的权威著作,它详细阐述了在并发环境下如何设计和实现高效、可靠的程序。这本书涵盖了Java并发编程的核心概念、工具和最佳实践,对于想要提升Java并发编程技能的...
### Java多线程并发实战知识点解析 #### 一、引言 在计算机科学领域,**多线程**和**并发...通过深入理解Java多线程并发的基础知识及其内存管理机制,开发者可以更好地设计和优化多线程应用,提高系统的性能和稳定性。
Java并发库中还包括了并发集合,如ConcurrentHashMap、CopyOnWriteArrayList等,它们提供了线程安全的数据结构,可以在多线程环境下高效地进行读写操作。另外,Future和Callable接口允许异步计算结果,并可以检查...
在当今高度并发的应用环境中,Java多线程技术被广泛应用于处理数据库操作,以提升系统的响应速度和处理能力。本文将基于一个具体的Java多线程操作数据库的应用程序,深入探讨其背后的原理、实现细节以及潜在的挑战。...