这种用法要求在执行一些处理之前,一定要执行某项特殊操作,处理之后一定也要执行某项特殊操作。这种人为的顺序性,无疑增加了代码的耦合度,降低了代码的独立性。很有可能会成为线程死锁和资源操作冲突的根源。
这点一直让我不安,可是没有找到方法避免。毕竟,死锁或者资源操作冲突,是线程的固有问题。
很巧的是,正在我惴惴不安的时候,我的一个朋友提供了一个信息。Sun公司根据JCR,决定在jdk1.5中引入关于concurrency(并发)的部分。
以下这个网址是concurrency部分的util.concurrent一个实现。非常好的信息。对于处理多线程并发问题,很有帮助。
http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html
里面提供了一个ReadWriteLock类,标准用法如下。
Standard usage of ReadWriteLock:
class X {
ReadWriteLock rw;
// ...
public void read() throws InterruptedException {
rw.readLock().acquire();
try {
// ... do the read
}
finally {
rw.readlock().release()
}
}
public void write() throws InterruptedException {
rw.writeLock().acquire();
try {
// ... do the write
}
finally {
rw.writelock().release()
}
}
}
我们可以看到,ReadWriteLock同样要求调用的顺序——aquire()和release()。我对自己的例子增强了一点信心。
我又查看了WriterPreferenceReadWriteLock类,看到里面成对的方法,startRead(),endRead();startWrite(),endWrite()。我的心情完全放松了下来。我的思路虽然粗糙,但大体的方向是正确的。
分享到:
相关推荐
3. **线程间的同步**:C++09提供了`std::mutex`、`std::lock_guard`等同步原语,用于线程间的互斥访问和同步控制,从而有效地防止竞态条件的发生。 4. **线程本地存储**:C++09还引入了线程本地存储(Thread Local ...
### Java同步线程模型分析与改进 #### 一、引言 随着软件系统变得越来越复杂,多线程编程成为提高程序性能和响应性的关键手段之一。Java作为一种广泛使用的编程语言,自诞生以来就内置了对多线程的支持。然而,...
【标签】中的"xcrfa xcrfap xcrmf-801_ vc读写器"表明了这个项目的关键词,"xcrfa"和"xcrfap"可能是该读写器系列的不同型号或者特定功能的缩写,而"xcrmf-801"则是核心的读写器模型。"vc读写器"则直接指出了开发工具...
### Linux下的多线程实例——生产者消费者模型 在Linux环境下进行多线程编程时,一个常见的应用场景就是通过生产者消费者模型来管理线程间的通信和数据共享问题。本篇文章将详细解析一个基于Linux环境下的多线程...
### Android中的线程与多线程技术详解 在Android开发中,线程和多线程技术是实现应用程序高效运行的关键所在。本篇文章将详细介绍Android线程的基础...在实际开发中,应根据具体需求选择合适的线程模型和技术方案。
Redis是一款高性能的键值存储系统,它以其独特的单线程模型和高效的内存管理而闻名。在深入了解Redis的线程模型之前,我们先要明白一点:虽然Redis是单线程的,但它的性能并不低,反而在很多场景下表现出非常高的...
总的来说,Netty 是一个强大且灵活的网络通信框架,通过其高效的线程模型、易于使用的 API 和丰富的功能,极大地降低了开发网络应用的复杂性,提高了系统的性能和可扩展性。无论是在微服务架构、游戏后端,还是...
多线程服务器通常用于处理大量的并发连接请求,通过合理的线程模型设计和有效的线程间同步机制,可以显著提高服务器的性能和稳定性。OLPT模型和线程池模型各有优势,应根据具体的应用场景选择合适的模型。此外,进程...
3. 有序性问题:JVM为了优化性能,可能会对指令进行重排序,但这可能导致程序在多线程环境下行为不一致。volatile关键字可以防止指令重排序,但仅限于volatile变量的读写操作。更高级的控制可以通过使用synchronized...
这种模型广泛应用于并发编程,例如网络服务器处理客户端请求,或者数据库系统处理读写操作等。 在"MultiThread"这个文件中,很可能包含了实现上述模型的源代码。通过分析和理解这段代码,我们可以更好地掌握多线程...
### MonetDB 进程-线程模型详解 #### 一、MonetDB架构概览 MonetDB是一款高性能的列式存储数据库管理系统,其设计初衷是为了满足大规模数据分析的需求。MonetDB的核心特色之一在于其独特的进程-线程模型,这种模型...
Java Nio实现React堆线程模型是Netty框架的核心特性之一,它极大地提高了网络应用程序的性能和可扩展性。在深入探讨这个主题之前,我们首先需要理解Java NIO(非阻塞I/O)的基本概念。 Java NIO,全称为Non-...
在“多线程-day02”的学习资源中,我们深入探讨了Java内存模型以及多线程的特性与控制机制。 **Java内存模型** Java内存模型,也称为JVM内存模型,是Java程序员理解和掌握的基础知识,特别是在进行并发编程时。它...
在深入探讨Netty的Reactor线程模型源码之前,我们需要先理解Reactor模式的基本概念。 Reactor模式是一种设计模式,常用于处理并发I/O事件。在多路复用I/O(如epoll、kqueue)中,Reactor模式是关键组成部分,它负责...
2. **Linux线程模型**: - Linux内核线程与用户级线程:Linux内核不直接支持用户级线程,而是通过内核线程来实现用户级线程的映射,即每个线程对应一个内核线程。 - N:1、1:1和M:N模型:N:1模型(如Linux)中多个...
3. **主线程**: 在`main`函数中,创建了20个线程(10个生产者线程和10个消费者线程),并使用`WaitForMultipleObjects`函数等待所有线程完成执行后退出程序。 #### 同步机制 虽然示例代码中没有明确实现同步机制,...
理解I/O模型(同步、异步、阻塞、非阻塞)和缓冲技术能优化读写性能。 3. 文件操作API:在操作系统层面,文件读写通常通过特定的系统调用(如open, read, write, close等)来实现。熟悉这些API的使用对于开发高效...
Select模型是最基础的I/O管理方式,它允许程序监视多个套接字,等待它们中的任意一个准备好读写操作。当有可用的事件时,`select`函数返回,这样程序可以决定接下来要执行的操作。这个模型简单且可移植,但当监控的...