`

ReentrantLock实例

阅读更多
package concurrent.lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class PrintMsg{
	private Lock lock=new ReentrantLock();
	public void print(String name){
		while(true){
			lock.lock();
			try{
				for(int i=0;i<name.length();i++){
					System.out.print(name.charAt(i));
				}
				System.out.println();
			}finally{
				lock.unlock();
			}
		}
		
	}
}


package concurrent.lock;

public class ReenTrantLockTest {
	public static void main(String[] args) {
		final PrintMsg pm=new PrintMsg();
		new Thread(new Runnable() {
			@Override
			public void run() {
				pm.print("天马流星拳");
			}
		}).start();
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				pm.print("钻石星辰拳");
			}
		}).start();
	}
}

分享到:
评论

相关推荐

    并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解

    * lock:ReentrantLock实例,用于保护队列操作 * notEmpty和notFull:Condition实例,用于通知等待的线程 在ArrayBlockingQueue中,put方法用于将元素插入队列,take方法用于从队列中获取元素。当队列为空时,take...

    JavaLock与Condition的理解Reentran

    每个ReentrantLock实例都有一个默认的Condition,通过`newCondition()`方法创建。Condition允许创建多个条件,每个条件对应一个等待队列。 **1. 基本操作** - `await()`: 当前线程释放锁并进入等待状态,直到被...

    线程 临界点.rar案例

    在这个例子中,我们创建了一个ReentrantLock实例,并在需要同步的代码块前调用`lock()`,在完成后调用`unlock()`,以确保线程安全。 除了synchronized和Lock,Java还提供了一些其他的线程同步工具,如Semaphore...

    哲学家就餐的Java系统 有图

    可以为每根筷子创建一个ReentrantLock实例,哲学家在获取筷子时获取锁,用餐完毕后释放锁。 除了上述机制,还有其他并发控制策略,如读写锁、条件变量等,可以用来优化解决方案。例如,可以使用读写锁使得在没有...

    java ReentrantLock详解.docx

    - 在`ServiceIsFair`示例中,我们创建了`ReentrantLock`实例,并在`serviceMethod`中使用`lock.isFair()`检查锁的公平性。 - `ServiceIsHeldByCurrentThread`展示了如何使用`isHeldByCurrentThread()`检查当前线程...

    java并发编程专题(五)----详解(JUC)ReentrantLock

    在给定的例子中,创建了一个ReentrantLock实例,并在get()和set()方法中使用lock()和unlock()进行加锁和解锁操作。两个方法中都嵌套调用了对方,因此在多线程环境下,一个线程在获取锁后可以再次获取同一把锁,这就...

    ReentrantLock解析

    在ReentrantLock中,Unsafe用于初始化AQS实例,设置和获取`state`字段,以及实现锁的原子操作,如compareAndSwapInt()方法用于无锁操作,保证了并发安全性。 此外,ReentrantLock还支持公平锁和非公平锁两种模式。...

    ReentrantLock与synchronized

    - 修饰实例方法:锁定的是当前实例对象。 - 修饰静态方法:锁定的是类的Class对象。 - 修饰代码块:可以指定锁定的对象,通常用于同步类中的非静态成员变量。 3. **优势**: - 使用简单,无需额外的API依赖。 ...

    java Lock接口详解及实例代码

    在这个例子中,我们创建了三个售票窗口(线程),每个窗口都有一个ReentrantLock实例。当票数为0时,线程会调用`condition.await()`进入等待状态,直到其他线程调用`condition.signalAll()`唤醒它们。`ReentrantLock...

    ReentrantLock 与 synchronized 简介

    锁的对象取决于方法的作用域:静态方法使用类对象作为锁,实例方法使用当前对象实例作为锁。 - **代码块同步**:使用`synchronized`关键字包围代码块,可以指定锁对象。例如:`synchronized (lockObject) { // code...

    java高级编程100实例

    实例可能会涵盖线程同步(如synchronized关键字、wait/notify机制、ReentrantLock)和并发集合(如ConcurrentHashMap和CopyOnWriteArrayList)的使用。 2. **网络编程**:Java的Socket和ServerSocket类允许开发者...

    java 多线程并发实例

    Java提供了synchronized关键字以及Lock接口(如ReentrantLock)来实现同步。 - volatile:修饰变量,确保多线程环境下的可见性和有序性,但不保证原子性。在实例中,可能用于共享标志的设置与读取。 - wait()、...

    ReentrantLock源码详解--公平锁、非公平锁

    ReentrantLock的lock()方法是通过调用sync属性的lock()方法实现的,sync是公平锁或非公平锁的实例。如果是公平锁,会调用FairSync的lock()方法,否则调用NonfairSync的lock()方法。lock()方法会调用AQS的acquire()...

    7、深入理解AQS独占锁之ReentrantLock源码分析(1).pdf

    - **创建实例**:通过new ReentrantLock()创建锁实例。 - **获取锁**:调用lock()方法获取锁。 - **释放锁**:调用unlock()方法释放锁。 #### 3.3 ReentrantLock源码分析 ReentrantLock的核心在于它的Sync内部类,...

    java多线程编程实例_Source

    1. 同步机制:包括synchronized关键字和Lock接口(如ReentrantLock可重入锁)。synchronized用于解决共享资源的并发访问问题,而Lock提供了更细粒度的锁控制。实例中可能会展示如何使用这些同步机制避免数据不一致性...

    线程同步编程实例

    本文将深入探讨线程同步的概念,并通过一个简单的“售票”实例来阐述如何在Java中实现线程同步。 线程同步的目的是确保在特定时刻只有一个线程能够访问共享资源或执行特定代码段,这被称为临界区。当多个线程尝试...

    ReentrantLock源码详解--条件锁

    该方法会调用AQS中的ConditionObject类来实例化条件锁。 示例代码 ------------ 下面是一个使用ReentrantLock和Condition的示例代码: ```java public class ReentrantLockTest { public static void main...

    Java多线程同步具体实例.doc

    在实际开发中,我们应当根据具体情况选择适合的同步策略,如使用同步方法、同步块,或者其他的并发控制工具,如`ReentrantLock`等,以确保多线程环境下的正确性和效率。理解并熟练运用多线程同步,对于编写高并发、...

    继承Thread类构造多线程实例

    - Java还提供了`Lock`接口(如`ReentrantLock`)和条件变量(如`Condition`)等高级同步工具,可以更灵活地控制线程间的协作。 5. **文件结构与开发环境**: - `.classpath`和`.project`是Eclipse IDE的工作空间...

    Java多线程编程实例

    本书“Java多线程编程实例”深入浅出地讲解了如何在Java环境中实现多线程操作,尽管出版时间较早,但其内容的经典性和实用性使其在现代开发中仍具有极高的参考价值。 首先,我们要理解Java中的线程是如何创建的。...

Global site tag (gtag.js) - Google Analytics