http://blog.csdn.net/huang_xw/article/details/7090177
lock和synchronize区别:
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情
ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c)tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
分享到:
相关推荐
然而,需要注意的是,过度使用`lock`可能导致死锁和性能下降,因此在编写多线程代码时,应尽量减少锁的使用,并考虑其他同步机制,如`Monitor`、`Mutex`、`Semaphore`或`Interlocked`类,根据具体场景选择最适合的...
本篇文章将深入探讨Python中的多线程安全问题以及如何使用锁(Lock)和可重入锁(RLock)来解决这些问题。 首先,我们要理解什么是线程安全。线程安全是指在多线程环境下,一个函数或方法被多个线程调用时,不会...
本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。以下是这些实例可能涉及的关键知识点: 1. **线程创建**:C#中创建线程主要有两种方式,一是通过`System.Threading.Thread`...
以下将详细讲解C#中多线程的基本使用、线程互斥以及相关的实例。 一、多线程基本使用 在C#中,创建和管理线程主要依赖于`System.Threading`命名空间中的`Thread`类。通过实例化`Thread`类并传入一个`ThreadStart`...
Unity3D 中的多线程可以使用 C# 的 lock 关键字来实现线程安全。lock 关键字可以确保只有一个线程可以在特定时间内访问特定的对象。例如: ```csharp int a = 50; object guard = new object(); void ...
在计算机编程中,多线程是一种并发执行任务的技术,它允许多个子任务在同一时间运行,从而提高了程序的效率和响应性。这个“多线程例子”演示了如何在C++环境中实现多线程功能。下面我们将深入探讨多线程的基本概念...
在实际的多线程应用中,除了`lock`,还可以使用`Monitor`、`Mutex`、`Semaphore`等其他同步机制来实现互斥和资源限制。例如,`Mutex`允许跨进程的互斥访问,而`Semaphore`则可以控制同时访问资源的线程数量。 测试...
3. 资源消耗测试:分析多线程运行时内存、CPU和其他资源的使用情况。 4. 并发测试:评估程序在高并发场景下的稳定性和响应能力。 5. 错误处理和异常测试:确保在多线程环境下程序能够正确捕获和处理异常。 总之,多...
这里我们探讨的“Lock及多线程ATM取款实例”就是一个典型的多线程编程问题,主要涉及C#编程语言,以及如何在多线程环境下确保数据一致性与安全性。 首先,我们要理解什么是`Lock`。在C#中,`Lock`是一个关键字,...
本资源包含六个C#.NET多线程实例,涵盖了多线程的基本使用以及高级特性,如线程互斥,确保了线程安全和数据一致性。 1. **多线程基础**: - **创建线程**:在C#中,可以使用`Thread`类创建新线程。通过构造函数...
本资源“C#.NET多线程实例6个”涵盖了多线程的基本使用以及更高级的概念,如线程互斥,这将帮助开发者深入理解并有效地应用多线程技术。 1. **多线程基本使用**:在C#中,创建和管理线程主要通过`System.Threading`...
"大漠多线程模板"是一个专门针对C#开发的多线程处理框架,它为开发者提供了便捷的方式来管理和优化多线程应用。这个框架由知名开发者"大漠"创建,旨在简化复杂的并发编程,提高代码的可读性和可维护性。 多线程允许...
本资源包含六个完整的多线程实例,涵盖了从基础使用到高级特性的全面实践,例如线程的创建、同步与互斥。 1. **线程的创建**:在C#.NET中,可以使用`System.Threading.Thread`类来创建新的线程。实例可能演示了如何...
本实例将通过模拟ATM机存取款业务来深入探讨`Lock`的使用以及多线程、异步编程和委托的应用。 首先,让我们理解`Lock`的工作原理。`Lock`通过创建一个对象的监视器锁来实现线程同步,当一个线程进入`Lock`代码块时...
1. **多线程基本使用**: 多线程的基本使用通常涉及到创建和启动线程。在C#中,可以使用`System.Threading.Thread`类来创建新线程。通过实例化`Thread`对象并传递一个委托(如`ThreadStart`或`...
本文将深入探讨在多线程环境中使用List时遇到的非线程安全问题,并提供相应的解决方案和最佳实践。 List是.NET框架中常用的一个动态数组,它提供了方便的增删改查操作。然而,List并未设计为线程安全的容器,这意味...