http://blog.csdn.net/fw0124/article/details/6672522
别人理解如下:
如果我们把每个线程理解成 一个个门,门都需要上锁,
在没有ReentrantLock之前,我们上锁,可能统一用sycnchronized(钥匙),大家都在竞争锁钥匙,钥匙只有一把,谁先拥有谁就先开门进去,门打不开的就一直卡死等待,浪费时间,还不能干其他事情,就消耗在这里了
有了ReEntrantLock,英文解释可重用锁, 就不需要钥匙了,我们可以灵活的为一组门(thread)配置一把特殊的锁,为另一组门配置另外一把锁,多灵活啊,这把锁仍然拥有synchronized的功能,
1 如果用tryLock(非阻塞),此次获取不到锁,那你也不会等待,可以在门口玩会手机,或者去超时买菜,一会再来trylock一次 这个方法更灵活
2如果用lock(阻塞),那就跟synchronized一样的,获取了锁,就开门了,同一时刻 其他的门就死等,不能干其他事情
另外提醒:trylock lock成功了 都要释放锁各一次,否则就死锁了哦
相关推荐
通过对ReentrantLock和synchronized的全面比较,帮助开发者更好地理解和应用这两种锁定机制。 其他说明:本文不仅提供了理论上的分析,还附带了大量的代码实例,有助于读者通过实践加深理解。此外,对于一些复杂的...
在Java多线程编程中,`ReentrantLock`和`synchronized`都是用于实现线程同步的重要工具,确保在并发环境中数据的一致性和正确...例如,`TestLock.java`中的示例可能就是比较了两种锁在特定场景下的使用效果和性能差异。
Lock、Synchronized 和 ReentrantLock 是 Java 中三种常用的同步机制,每种机制都有其特点和使用场景。下面对这三种机制进行详细的分析和比较。 一、Synchronized Synchronized 是 Java 中最基本的同步机制,它...
2. **synchronized的两种形式**: - **同步代码块(Block)**:`synchronized (object) { ... }` 这里,`object`是监视器对象,只有获取到该对象的锁的线程才能进入代码块执行。这种方式更加精确,可以锁定特定的...
Java中的同步锁,即`synchronized`关键字,是Java多线程编程中用于解决并发问题的重要机制。它确保了对共享资源的互斥访问,防止数据的不一致性。当我们有多线程环境并涉及到共享数据时,可能会出现竞态条件,就像...
`synchronized`关键字主要有两种使用方式: 1. **同步代码块(synchronized block)**: ```java synchronized (object) { // 临界区 } ``` 在这里,`object`是用于锁定的监视器对象。所有线程在进入临界区前...
synchronized通过锁的概念来控制对代码块或方法的访问,分为两种形式:同步代码块和同步方法。 1. **synchronized的特性** - 原子性:synchronized保证了在同一时刻,只有一个线程能够执行被修饰的代码,避免了...
synchronized关键字和ReentrantLock类是Java中实现悲观锁的典型方式。 2. 自旋锁 自旋锁是一种以牺牲CPU时间来减少线程调度开销的锁策略,它通过一个忙循环(spin loop)来等待锁的释放,而不会立即进入阻塞状态。...
在Java编程语言中,`synchronized`关键字是用于实现线程同步的重要机制,它确保了在多线程环境中的数据一致性与安全性。本篇将详细解析`synchronized`的关键特性和使用方法,帮助开发者深入理解如何在并发编程中有效...
总结,`synchronized`是Java中实现线程同步的重要机制,它的核心在于监视器锁和互斥性。理解和合理使用`synchronized`能够帮助我们构建稳定、高效的多线程程序,但同时也要注意避免潜在的死锁和性能问题。在实际编程...
在实际开发中,除了`synchronized`关键字,Java还提供了其他并发控制机制,如`java.util.concurrent` 包中的 `ReentrantLock`、`Semaphore`、`CyclicBarrier` 等工具,它们提供了更灵活和强大的并发控制能力。...
首先,最基本的锁是`synchronized`关键字,它提供了两种用法:同步方法和同步代码块。同步方法通过在方法声明上添加`synchronized`来实现,确保同一时间只有一个线程可以执行该方法。同步代码块则更加灵活,可以指定...
在Java中,主要的锁机制包括`synchronized`关键字和`Lock`接口(如`ReentrantLock`)。下面将详细讲解这两种锁机制及其应用。 1. `synchronized`关键字 `synchronized`用于标记方法或代码块,确保同一时间只有一个...
在Java语言中,有两个特殊的类用于多线程同步,分别是synchronized关键字和ReentrantLock类。 1. synchronized关键字 synchronized关键字是Java语言中的一种同步机制,用于对方法或者代码块进行同步。synchronized...
内置锁是通过synchronized关键字实现的,它提供了两种形式:同步方法和同步代码块。同步方法通过在方法声明前加上synchronized关键字来锁定整个方法的执行,而同步代码块则允许我们更精确地锁定特定的代码区域。 ...
`synchronized`关键字主要有两种用法:修饰实例方法和同步代码块。当一个方法被`synchronized`修饰时,同一时间只能有一个线程访问该方法,其他试图访问的线程会被阻塞,直到当前线程执行完毕。这种方式保证了同一...
ReentrantLock是Java多线程中一种高级的锁机制,它实现了Lock接口,提供了与synchronized相同的并发性和内存语义,但添加了一些特性,如锁投票、定时锁等候和可中断锁等候。ReentrantLock类的主要特点是可以重入,即...
在Java编程中,多线程并发机制是一种关键的技术,它允许多个任务或操作在同一时间进行,从而提高程序的执行效率。在这个例子中,我们看到一个简单的Java多线程程序,用于模拟售票系统,其中有两个类`SellThread`和`...
在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...
在Java中,线程是程序执行的最小单位,一个进程可以包含多个线程,每个线程都有自己独立的生命周期,包括产生、存在和消亡。 线程与进程的区别在于,程序是静态的代码,而进程是程序的动态执行实例,线程则是进程...