`
落叶换新叶
  • 浏览: 25525 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Lock的使用

阅读更多
public class LockTest {

	public static void main(String[] args) {
	
		LockTest test = new LockTest();
		final DealMoney money = test.new DealMoney();
		
		for(int i=0;i<10;i++) {			
			new Thread(new Runnable() {
				@Override
				public void run() {
					money.getM();
				}
			}).start();
		}
		for(int i=0;i<10;i++) {			
			new Thread(new Runnable() {
				@Override
				public void run() {
					money.setM(20);
				}
			}).start();
		}
	}
	
	public class DealMoney {
		private int money = 100;
		
		private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
		
		public DealMoney() {
		}
		public void setM(int money) {
			lock.writeLock().lock();
			try {
				System.out.println(Thread.currentThread().getName()+":进入写操作");
				try {
					Thread.sleep(10000);
				} catch (InterruptedException e) {
				}
				this.money = this.money+money;
				System.out.println(Thread.currentThread().getName()+":存入金额:"+this.money);
			} finally {
				lock.writeLock().unlock();
			}
		}
		public int getM() {
			lock.readLock().lock();
			System.out.println(Thread.currentThread().getName()+":进入读操作");
			try {
				Thread.sleep(10000);
				System.out.println(Thread.currentThread().getName()+":得到金额:"+this.money);
			} catch (InterruptedException e) {
			}finally {
				lock.readLock().unlock();
			}
			return this.money;
		}
	}
}

 

0
0
分享到:
评论
1 楼 masuweng 2017-08-30  
   没注释;

相关推荐

    .NET LOCK使用方法

    .NET LOCK使用方法 .NET框架中的Lock关键字用于控制多线程对共享资源的访问,确保在同一时间只有一个线程能够执行一个代码块。当一个线程访问被锁定的资源时,其它所有尝试获取锁的线程将被阻塞,直到锁被释放。 ...

    C# Lock实例

    这个实例将深入探讨`Lock`的使用,以及它在确保线程安全方面的作用。 在C#中,`Lock`是通过`System.Threading`命名空间下的`Monitor`类实现的。`Lock`关键字创建了一个同步块,当一个线程进入该同步块时,它会获取...

    android WakeLock使用方法代码实例

    Android WakeLock 使用方法代码实例 Android WakeLock 是 Android 中的一个重要组件,它可以控制屏幕的背光开关,唤醒锁的意思是它可以在屏幕关闭时保持屏幕的点亮状态。下面是一个使用 WakeLock 的代码实例: ...

    Redis分布式锁python-redis-lock使用方法

    python-redis-lock 多个redis客户端访问同一个redis服务端,控制并发。 github:https://pypi.org/project/python-redis-lock/ 在使用这个库之前,需要安装如下: pip install python-redis-lock 使用锁的示例: ...

    java的Lock锁原理详解.docx

    以下是一个简单的Lock使用示例,展示了ReentrantLock的使用: ```java ReentrantLock lock = new ReentrantLock(); public static void main(String[] args) throws InterruptedException { lock.lock(); // 获取...

    lock(this)的使用说明

    "lock(this)的使用说明" lock(this)是C#语言中的一种同步机制,用于确保在多线程环境下对共享资源的访问安全。通过使用lock(this)语句,可以保证在同一时刻只有一个线程可以访问某个资源,防止多个线程同时访问同...

    Lock的使用.rar

    本篇文章将深入探讨`Lock`的使用以及它如何帮助解决并发问题。 1. **什么是Lock?** `Lock`是C#中的一种同步原语,通过`System.Threading`命名空间下的`Monitor`类实现。它提供了一种机制,使得同一时间只有一个...

    Python 进程互斥锁 Lock - Python零基础入门教程.pdf

    三、进程互斥锁Lock使用 案例一:不使用互斥锁的多进程示例 下面的代码创建了10个进程,每个进程运行函数`foo`,没有使用互斥锁。由于缺少锁的保护,输出显示多个进程同时运行,可能导致并发问题: ```python ...

    Synchronized 和 Lock 的区别和使用场景

    本文将深入探讨两种主要的锁机制:`synchronized`关键字和`Lock`接口,以及它们各自的特点、应用场景和使用方式。 一、Synchronized `synchronized`是Java中的一个内置关键字,用于提供线程安全。它的主要作用是...

    Capslock++,Capslock键利器

    在日常使用中,许多程序员、数据输入员以及对键盘快捷键有高需求的用户发现,Capslock键的位置在主键盘区中心,易于触及,如果能合理利用,可以大大提高工作速度。Capslock++就是为此目的设计的,它允许用户自定义...

    WINXP下无法使用CAPS LOCK键关闭Caps Lock指示灯

    ### WINXP下无法使用CAPS LOCK键关闭Caps Lock指示灯 在Windows XP操作系统中,有用户反映遇到一个特殊的问题:即无法通过按下Caps Lock键来关闭键盘上的Caps Lock指示灯。这个问题虽然看似微不足道,但对于习惯了...

    JAVA Lock加锁实例

    Lock锁是对象锁,仅在同一对象中,锁才会生效。(不做论证) (以下场景皆为单例模式下运行) lock.lock()的加锁方式,会使后续请求的线程堵塞等待。(方案A) lock.tryLock()的加锁方式,不会堵塞,会立即返回加锁...

    实现yarnlock与packagelockjson相互转换

    在转换过程中,需要注意的是,由于两个锁文件的格式和包含的信息不完全相同,转换可能会丢失某些细节,因此建议在团队中统一使用一种包管理器以减少潜在问题。 ### 结论 `yarn.lock`和`package-lock.json`是...

    Lock、Synchoronized和ReentrantLock的使用

    Lock、Synchronized 和 ReentrantLock 的使用 Lock、Synchronized 和 ReentrantLock 是 Java 中三种常用的同步机制,每种机制都有其特点和使用场景。下面对这三种机制进行详细的分析和比较。 一、Synchronized ...

    DistributedLock:用于分布式同步的.NET库

    分布式锁DistributedLock是一个.NET库,它基于各种基础技术提供了健壮且易于使用的分布式互斥锁,读写器锁和信号灯。 使用DistributedLock,跨多个应用程序/机器同步对代码区域的访问非常简单: using ( await ...

    i3lock:改进的屏幕锁

    i3lock-改进了的屏幕储物柜 &gt;是像slock这样的简单屏幕锁。 启动后,您会看到一个白色屏幕(您可以配置颜色/图像)。... 随着时间的流逝,i3...在OpenBSD上,i3lock使用bsd_auth(3)框架。 安装 请参阅。 要求 pkg-con

    DistributedLock:使用Redis的分布式锁

    在这个例子中,`lock()`方法尝试使用`SETNX`获取锁,而`unlock()`方法在释放锁之前会检查是否确实拥有锁,防止误删其他实例的锁。注意,实际应用中还需要处理锁自动续期、超时未释放等问题,以防止死锁。 在测试...

    C#实操控制并发之Lock和Redis分布式锁

    本文将深入探讨C#中如何使用Lock和Redis分布式锁来解决并发问题,以秒杀系统为例进行阐述。 首先,让我们理解什么是并发控制。并发控制是指在多线程环境下确保数据的一致性和完整性,防止多个线程同时访问同一资源...

Global site tag (gtag.js) - Google Analytics