/*
ReentrantLock.Lock实现线程互斥
*/
package threadTest;
import java.util.concurrent.locks.ReentrantLock;
/**
*ReentrantLock 的效率比
*/
public class LockThread {
ReentrantLock lock1 = new ReentrantLock();
// ReentrantLock lock2 = new ReentrantLock();
class LockInitFirst implements Runnable{
public void run() {
lock1.lock();
try {
System.out.println("lock1");
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}finally{
lock1.unlock();
}
}
}
class LockInitSecond implements Runnable{
public void run() {
lock1.lock();
try {
System.out.println("lock2");
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}finally {
lock1.unlock();
}
}
}
private LockInitFirst getLockInitFirst(){
LockInitFirst lif = new LockInitFirst();
return lif;
}
private LockInitSecond getLockInitSecond(){
LockInitSecond lis = new LockInitSecond();
return lis;
}
public static void main(String[] args) {
LockThread lt = new LockThread();
// LockInitFirst lifirst = lt.new LockInitFirst();可以用这种方式new出一个内部类
Thread th1 = new Thread(lt.getLockInitFirst());
Thread th2 = new Thread(lt.getLockInitSecond());
th1.start();
th2.start();
}
}
分享到:
相关推荐
使用这两个方法可以实现线程间的同步和互斥。此外,ReentrantLock还支持更高级的功能,如条件变量(Condition),这允许开发者创建独立于锁本身的等待队列,实现更复杂的同步逻辑。例如,可以使用`newCondition()`...
互斥锁确保同一时间只有一个线程访问临界区,读写锁允许同时有多个读操作但不允许写操作与任何读写操作同时进行。 - **信号量**:用来控制多个线程对共享资源的访问,可以通过调整信号量值来控制并发数量。 - **原子...
在Java中,我们可以使用`synchronized`关键字或ReentrantLock等类来实现线程互斥。 1. **synchronized 关键字**:synchronized 可以用来修饰方法或代码块,当一个线程进入一个由 synchronized 修饰的方法或代码块时...
Java多线程ReentrantLock互斥锁详解 ReentrantLock是Java多线程编程中的一种锁机制,它可以实现线程之间的同步访问资源。ReentrantLock的主要特点是可以重入,即一个线程可以多次获得锁,而不需要释放锁。这种机制...
在Java多线程编程中,通过结合Lock和Condition接口,可以灵活地实现条件变量,并解决更复杂的多线程协作问题。特别是在实现生产者-消费者模式、读者-写者模式等经典的同步问题时,条件变量提供了一种有效的解决方案...
- `Lock`接口提供的锁可以实现`synchronized`关键字所具有的基本功能,即实现线程之间的互斥。 - **不同点**: - **语义和灵活性**:`Lock`提供了更精细的控制和更灵活的锁机制。例如,`Lock`支持尝试锁(`tryLock...
线程同步是为了避免多线程环境下的数据竞争问题,Java提供了多种机制,如synchronized关键字、Lock接口(如ReentrantLock)以及volatile变量。synchronized用于控制对共享资源的访问,保证同一时刻只有一个线程能...
1. 同步机制:为了解决多线程并发访问共享资源导致的数据不一致问题,Java提供了synchronized关键字、Lock接口(如ReentrantLock)以及相关的并发工具类。 2. synchronized:用于修饰方法或代码块,实现互斥访问。...
1. synchronized关键字:用于保证线程安全,它可以修饰方法或代码块,实现对共享资源的互斥访问。 2. volatile关键字:保证变量的可见性和有序性,但不保证原子性。 3. Lock接口与ReentrantLock类:提供了比...
Synchronized和java.util.concurrent.locks.Lock都是Java中用于实现线程同步的关键字和接口,它们的主要目标是保证多线程环境下的数据一致性与并发安全。然而,两者在使用方式、控制粒度以及灵活性方面存在显著差异...
2. **Java**:Java中使用`synchronized`关键字或`java.util.concurrent.Lock`接口的实现如`ReentrantLock`来实现互斥。下面是一个`synchronized`的例子: ```java public class PrintBlock { public synchronized ...
- Lock接口与ReentrantLock类:提供比synchronized更细粒度的锁控制,支持公平锁和非公平锁、可中断锁、读写锁等。 5. **死锁** - 死锁是指两个或多个线程相互等待对方释放资源而无法继续执行的状态。避免死锁的...
二、Java多线程实现 1. 继承Thread类:创建一个新的类,继承自Thread类,重写run()方法,然后创建该类对象并调用start()方法启动线程。 2. 实现Runnable接口:创建一个新的类,实现Runnable接口,实现run()方法,...
- **synchronized**:用于控制多个线程对共享资源的访问,实现互斥和可见性。 - **volatile**:确保共享变量的可见性,但不保证原子性。 - **Lock**:提供比synchronized更细粒度的锁控制,如ReentrantLock、...
Java中的`ReentrantLock`是Java并发包`java.util.concurrent.locks`中的一个高级锁机制,它是可重入的互斥锁,具有与`synchronized`关键字相似的同步性,但提供了更多的灵活性和控制功能。本篇文章将深入探讨`...
19. **Java中的Lock接口实现类**:包括ReentrantLock(可重入锁)、Semaphore(信号量)、ReadWriteLock(读写锁)等,它们提供了更细粒度的控制和更高的性能。 20. **线程中断**:通过interrupt()方法标记线程为...
线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .........................
2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .....................
各线程之间变量不可见,线程通信通过共享主内存实现。 volatile 仅保证可见性 作用 不会被缓存在寄存器或其他对cpu不可见的地方 强制其他线程读主内存 编译器和运行时不会讲该变量的操作与其他内存操作一起重...
在C++中,可以使用`std::mutex`来实现互斥锁,而在Java中,可以使用`synchronized`关键字或者`java.util.concurrent.Lock`接口的实现,如`ReentrantLock`。 同步是指控制多个线程按照一定的顺序或条件执行,以避免...