一、同步类容器
1、传统的同步类容器Vector,HashTable,为什么是安全型的,是因为在内部功能都是采用JDK的Collections.synchronizedXXX()实现,底层机制就是传统的关键字synchronized对每个方法实现同步。
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
可以看到这这些增删的方法都加了synchronized,每次只能有一个线程访问,第二个线程只能等待,不支持并发。 保证了安全,但性能不好。
二、并发类容器
1、ConcurrentMap是个接口,实现的主要有:ConcurrentHashMap,ConcurrentSkipListMap
concurrentHashMap引入segment,更细粒度减少锁的范围,从而提高并发,一个map最多分为16段
每个段其实是一个HashTable
2、CopyOnWriteXXX
CopyonWriteArryList:对写操作通过ReentLock进行加锁,读操作并无加锁; 场景:读多写少
原理:集合[1,2,3],如果有线程写元素会拷贝一份,然后再拷贝的副本上进行添加,写之后,对象指向新的数组引用,而不影响读,但是这种性能不好,频繁的写会拷贝数组,同时旧数组又会被回收,导致性能不好
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}
我们可以看到都是有锁,保证写的时候安全性
CopyonWriteArraySet
转载于:https://my.oschina.net/u/2504766/blog/758700
分享到:
相关推荐
【标题】:“28线程五大状态1” 【描述】:描述中提到的内容与线程状态和 Redis 相关,但未直接提及 Redis 的线程模型。线程的状态包括新生、就绪、阻塞、运行和消亡,这些是操作系统中线程的基本生命周期阶段。 ...
计算机网络实验期末作业-15小时JavaSocket多线程五围棋简易模拟器
5. **同步详细信息**(IBM多线程五-同步详细信息.doc): - `wait()`, `notify()`, `notifyAll()`方法:在同步块或同步方法中使用,用于线程间通信和协作。 - `Lock`接口:比`synchronized`更灵活的锁机制,提供了...
五、线程安全 在多线程环境中,需要特别注意线程安全问题。当多个线程访问同一资源时,应确保资源的正确访问和更新,防止数据不一致。使用MFC的同步对象(如C CriticalSection)可以确保对共享数据的独占访问。 六...
五、多线程技术的应用 多线程技术广泛应用于各种领域,如网络编程、数据库操作、图形界面编程等。使用多线程技术可以提高系统的响应速度、提高系统的性能和可靠性。 六、结论 JAVA语言的多线程机制为编程人员提供...
#### 五、线程消息传递 在多线程环境中,线程间通信非常重要。MFC提供了 `PostThreadMessage` 函数来发送线程消息,其原型如下: ```cpp BOOL PostThreadMessage( UINT message, WPARAM wParam, LPARAM lParam ...
本资源“VC多线程例程五及图解文档(工作者线程)”深入探讨了如何在Visual C++中创建和管理工作者线程,以实现并发处理。 工作者线程,也称为后台线程,是在应用程序中执行非用户界面任务的线程。它们不直接与用户...
在Java编程语言中,"兔子、乌龟和公鸡赛跑"是一个巧妙地用来演示多线程概念的例子。这个例子通常被用作教学工具,帮助开发者理解如何在并发环境中控制和协调不同线程的行为。多线程是现代计算中一个核心的概念,特别...
ePump框架工作模型4.1 快服务模型 -- 没有worker线程,只有ePump线程4.2 复合服务模型 -- 少数 ePump 线程,大部分worker 线程五. ePump框架中的文件FD六. ePump框架的回调(Call Back)机制七. ePump框架的调度...
线程同步是多线程编程中的重要概念,用于协调多个并发执行的线程,确保它们在访问共享资源时不会产生竞态条件或数据不一致性。在Windows编程中,提供了多种线程同步机制,包括互斥量、临界区、原子操作、事件以及...
五、源码分析 在提供的压缩包文件“易语言线程返回数据的方法源码”中,应当包含了具体的实现细节。通过阅读源码,你可以了解到实际应用中的具体实现方式,包括线程创建、数据交换以及返回的逻辑。 总结,易语言...
在Python中,线程的状态变化对理解和管理多线程程序至关重要,以下是对Python线程五个状态的详细说明。 1. 线程的新建状态(New) 新建状态是线程对象被创建后尚未启动前的状态。在这个阶段,线程对象已经存在,但...
五、线程池 线程池是一种优化资源使用的技术,它预先创建一组线程,当有任务需要执行时,从线程池中获取空闲线程而不是每次都创建新线程。Delphi的System.Classes单元提供了TThreadPool类,方便开发者使用线程池进行...
五、示例代码 这里提供一个简单的PB.NET多线程示例: ```csharp using System.Threading; public class MyThreadClass { public void RunTask() { // 在这里执行你的任务 } } public class Program { static ...
五、实际应用 E语言多线程在实际应用中可能涉及以下领域: 1. Web服务器:处理多个客户端请求。 2. 数据库连接池:复用数据库连接,减少建立和关闭连接的时间。 3. 大数据处理:并行处理大量数据,加快计算速度。 4....
五、源码分析 提供的压缩包文件“易语言多线程传递多参数源码”包含了实际的代码实现,这将有助于我们理解上述概念。源码中可能会展示如何创建线程、设置线程参数、以及在线程子程序中如何访问和处理这些参数。通过...
`ThreadPoolExecutor`是线程池的具体实现,它的构造函数接受五个参数: 1. `corePoolSize`: 核心线程数,即使无任务执行,也会保留这些线程。 2. `maximumPoolSize`: 最大线程数,当任务队列满时,线程池会创建新的...
每个线程都有自己的生命周期,包括新建、就绪、运行、阻塞和结束五个状态。 2. **创建线程的方式**: - 继承`Thread`类:创建一个新的类,继承自`Thread`,重写`run()`方法,然后创建该类的实例并调用`start()`...
五、线程池中的线程 * 使用ThreadPool类来管理线程池 * 使用QueueUserWorkItem()方法来将工作项添加到线程池 * 使用GetAvailableThreads()方法来获取可用线程数 六、案例:支持并发的异步日志组件 * 使用Logger类...
五、线程优先级 每个线程都有一个优先级,但操作系统并不保证优先级高的线程一定先执行,而是尽可能给予较高优先级的线程更多执行机会。 六、后台线程与前台线程 1. 前台线程:与进程生命周期绑定,只有所有前台...