package com.bjsxt.height.lock020; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class UseCondition { private Lock lock = new ReentrantLock();//重入锁。 private Condition condition = lock.newCondition();//与 wait() 和 notify方法相同。 public void method1(){ try { lock.lock(); System.out.println("当前线程:" + Thread.currentThread().getName() + "进入等待状态.."); Thread.sleep(3000); System.out.println("当前线程:" + Thread.currentThread().getName() + "释放锁.."); condition.await(); // Object wait System.out.println("当前线程:" + Thread.currentThread().getName() +"继续执行..."); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("释放锁method1"); lock.unlock(); } } public void method2(){ try { lock.lock(); System.out.println("当前线程:" + Thread.currentThread().getName() + "进入.."); Thread.sleep(3000); System.out.println("当前线程:" + Thread.currentThread().getName() + "发出唤醒.."); condition.signal(); //Object notify } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("释放锁method2"); lock.unlock(); } } public static void main(String[] args) { final UseCondition uc = new UseCondition(); Thread t1 = new Thread(new Runnable() { @Override public void run() { uc.method1(); } }, "t1"); Thread t2 = new Thread(new Runnable() { @Override public void run() { uc.method2(); } }, "t2"); t1.start(); t2.start(); } }
相关推荐
在Java并发编程中,可重入锁(ReentrantLock)是一种重要的同步机制,它提供了比synchronized更高级、更灵活的锁操作。本篇将基于《Java并发编程:自己动手写一把可重入锁》一文中的案例,深入探讨可重入锁的概念、...
`ReentrantLock`是Java并发包`java.util.concurrent.locks`中的一个类,它是可重入的互斥锁,具备与`synchronized`相同的基本行为,但增加了许多高级功能。以下是一些`ReentrantLock`的主要特性: 1. **可重入性**...
`ReentrantLock`全称为可重入锁,它支持重入特性,即线程可以多次获取同一锁。以下几点是`ReentrantLock`与`synchronized`的主要区别: 1. **尝试获取锁**:`ReentrantLock`提供了一个`tryLock()`方法,允许线程...
在示例中,`ReentrantLock` 的使用同样展示了可重入性,即在 `get()` 和 `set()` 方法中,锁被获取和释放,即使在多线程环境中,也不会出现死锁。 接下来,我们讨论一下为什么可重入锁能够防止死锁。死锁通常发生在...
`synchronized`是Java中一种最基本的锁机制,它可以修饰实例方法、静态方法或者代码块。通过`synchronized`关键字,Java虚拟机能够实现对特定资源的独占式访问,从而确保在多线程环境下对共享资源的操作是原子性的。...
本文将深入探讨JavaLock中的ReentrantLock(可重入锁)以及与其紧密相关的Condition接口,帮助你理解它们的工作原理和应用场景。 **一、ReentrantLock可重入锁** ReentrantLock是Java.util.concurrent.locks包下的...
通过合理地使用内置锁(如`synchronized`)和显式锁(如`ReentrantLock`),开发者可以根据实际需求选择合适的锁策略,从而优化程序的并发性能。同时,在设计多线程程序时,还需要考虑到锁的粒度问题,以便在保证...
使用ReadWriteLock与使用Lock接口的基本流程相似,需要分别获取读锁和写锁。以下是一个简单的例子: ```java public class Client { public static void main(String[] args) throws InterruptedException { ...
- **示例**:下面是一个简单的例子展示了如何使用`ReentrantLock`来保护对共享资源的访问: ```java class BankAccount { private final ReentrantLock balanceChangeLock = new ReentrantLock(); public ...
2. **ReentrantLock(可重入锁)**:ReentrantLock 是一个可重入、互斥的锁,它提供了比 synchronized 更加灵活的锁定机制。在 SquareTask 类的 run 方法中,我们通过调用 lock.lock() 获取锁,lock.unlock() 释放锁...
3. **ReentrantLock(可重入锁)**:Java从1.5版本开始引入了ReentrantLock,它提供了与synchronized类似的功能,但更强大且可自定义。ReentrantLock支持公平锁和非公平锁,可以显式地获取和释放锁,还提供了tryLock...
虽然这个例子展示了基本的线程同步,但实际的多线程编程中还需要考虑更复杂的并发问题,如死锁和竞态条件。死锁发生在两个或更多线程相互等待对方释放资源而无法继续执行的情况。竞态条件是指多个线程对共享变量的...
再来看看ReentrantLock可重入锁,它是synchronized的一个强大替代品,提供了更细粒度的控制。ReentrantLock同样支持公平锁和非公平锁,以及可中断的获取锁和尝试获取锁等功能。 ```java ReentrantLock lock = new ...
- **Lock接口与ReentrantLock类**:提供比`synchronized`更高级的锁机制,如公平锁、非公平锁、可重入锁、读写锁等。 5. **线程优先级**: Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认...
为此,Java提供了各种同步机制,如`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法、以及`ReentrantLock`等高级锁。合理使用这些机制可以避免线程间的不和谐交互。 文件名"多线程"可能是一个包含多...
3. `Lock`和`Condition`:从Java 5开始引入,提供了更细粒度的控制,比如可重入锁(`ReentrantLock`)和条件(`Condition`),可以实现更灵活的线程同步。 在Eclipse3.3和MyEclipse6这样的开发环境中,可以方便地调试和...
3. **ReentrantLock可重入锁**:这是Java提供的一个更灵活的锁,它提供了与synchronized相似的功能,但有更多的控制选项,如公平锁、非公平锁、可中断锁和读写锁。在售票场景中,我们可以使用ReentrantLock来保护对...
4. 可重入性:一个线程已经拥有某个对象的锁,它仍然可以再次进入该对象的同步代码,这就是`synchronized`的可重入特性。例如,一个线程可以同时进入一个对象的两个同步方法。 三、例子分析 例子一展示了两个线程...
- **ReentrantLock 和 Condition**:`ReentrantLock` 是一个可重入的互斥锁,它拥有比 `synchronized` 更多的功能,如公平锁、尝试锁等。`Condition` 是与 `ReentrantLock` 配合使用的条件对象,可以替代传统的 `...