此实例是关于读写同步锁的问题。
import java.util.Random;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockTest {
public static void main(String[] args) {
final Queue queue = new Queue();
for(int i =1;i<=3;i++){
new Thread(new Runnable() {
public void run() {
while(true){
try {
Thread.sleep((long)Math.random()*100000);
queue.put(new Random().nextInt(100000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
public void run() {
while(true){
try {
Thread.sleep((long)Math.random()*100000);
queue.get();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
}
class Queue{
//共享数据,只能有一个线程对其能更改
private Object data = 85;
ReadWriteLock rwl = new ReentrantReadWriteLock();
public void get(){
rwl.readLock().lock();
try {
System.out.println(Thread.currentThread().getName() + " be ready to read data !");
System.out.println(Thread.currentThread().getName() + " have read data :" + data);
}finally{
rwl.readLock().unlock();
}
}
public void put(Object data){
rwl.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName() + " be ready to write data !");
this.data = data ;
System.out.println(Thread.currentThread().getName() + " have write data :" + data);
}finally{
rwl.writeLock().unlock();
}
}
}
分享到:
相关推荐
简单的利用互斥变量、原子操作等技术实现多线程读写文件时的互斥,从而确保文件在操作过程中不会被破坏。例子并没有使用很多复杂的逻辑。适合刚接触多线程编程的新手学习理解多线程程序的编程思路。
在网络编程中,线程同步尤其重要,因为网络I/O操作通常是异步的,可能会引发多个线程同时对数据进行读写。在服务器端,线程可能需要处理并发的客户端请求,正确地同步这些线程可以确保服务的稳定性和响应速度。 ...
### Linux下的多线程实例——生产者消费者模型 在Linux环境下进行多线程编程时,一个常见的应用场景就是通过生产者消费者模型来管理线程间的通信和数据共享问题。本篇文章将详细解析一个基于Linux环境下的多线程...
为了解决这个问题,我们可以利用C#中的读写锁(ReaderWriterLockSlim)来实现线程同步。本文通过三行代码展示了如何使用读写锁解决多线程并发写入文件的冲突。 读写锁的核心在于,它允许多个线程同时读取资源,但只...
《秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据》 http://blog.csdn.net/morewindows/article/details/8646902 配套程序 在《秒杀多线程系列》的前十五篇中介绍多线程的相关概念,多线程同步互斥...
在IT领域,多线程是一种常见的编程技术,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。特别是在DELPHI2010这样的面向对象的编程环境中,多线程的应用更加广泛,因为它可以充分利用多核处理器...
**多线程**:多线程是指在一个进程中同时执行多个独立的线程。这种技术允许程序同时处理多个任务,提高系统的利用率和响应速度。在Java、Python、C#等编程语言中,都提供了对多线程的支持。 **高并发**:高并发是指...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
- **Semaphore类**:用于控制同时访问特定资源的线程数量,可以看作是一种更灵活的互斥机制。 3. **线程同步方法**: - **Mutex.WaitOne()** 和 **Mutex.ReleaseMutex()**:等待和释放全局互斥锁,确保线程安全地...
本资源"《Windows多线程编程技术与实例》-郝文化-源代码-3316.rar"提供了丰富的示例代码,涵盖了多线程、信号量、线程锁等核心概念,以及如何在VC++(Visual C++)环境下使用MFC(Microsoft Foundation Classes)和...
这个对象应该是线程安全的,以防止多个线程同时更新导致的数据冲突。使用`AtomicInteger`或`synchronized`块都是可行的选择。 7. **异常处理**:在多线程环境中,错误处理和异常捕获是必须的,以确保即使在单个线程...
本实例将详细讲解如何在多线程中使用C#的Queue类。 首先,我们创建一个队列实例,通过`new Queue()`来指定存储的数据类型。在本例中,队列存储的是字符串类型(string),所以是`Queue<string>`。接着,我们填充...
如果多线程同时读写(这里的指不同的线程用使用的是不同的Helper实例),后面的就会遇到android.database.sqlite.SQLiteException: database is locked这样的异常。对于这样的问题,解决的办法就是keep single ...
1. 文件读写:多线程可以提高文件读写的并发性,比如在处理大量文件时,每个线程处理一个文件。 2. 数据库操作:数据库连接通常昂贵且有限,多线程可以有效利用连接池,提高查询和更新速度。 3. Web服务器:多线程...
以下是使用TThread进行多线程读写的步骤: 1. **创建TThread子类**:首先,创建一个新的类,继承自TThread。在这个新类中,定义你需要在线程中执行的代码,即读取或写入数据的逻辑。 ```delphi type ...
本专题讲座由专家王保明主讲,深入探讨了Linux线程的相关概念、创建与管理、同步机制以及在实际应用中的问题和解决方案。 1. **线程的概念**: - 进程与线程:进程是资源分配的基本单位,而线程是执行调度的基本...
多线程不同步读写共享资源 文章配套代码 我在很早的时候就听说多线程不同步是可以...写线程判断条件 if(下一个指针==读线程指针) 其实这就是一简单的生产者与消费者问题。 以下是实现方法 共享资源 我使用循环缓冲区
VB.NET多线程编程技术是一种提高应用程序性能的关键手段,尤其对于时间密集型或...然而,需要注意的是,多线程编程也带来了复杂性和挑战,如死锁、竞态条件等问题,需要开发者具备一定的并发编程知识来避免这些问题。
通过这个实例,我们可以深入理解多线程编程在解决并发问题中的应用,以及如何在Linux环境中使用C语言和POSIX线程库来实现高效的并发控制。这对于我们设计和实现高效、稳定的多线程应用程序至关重要。