知识大全 新特征-锁(下)

Posted 账户

篇首语:古人已用三冬足,年少今开万卷余。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 新特征-锁(下)相关的知识,希望对你有一定的参考价值。

Java线程:新特征-锁(下)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    在上文中提到了Lock接口以及对象 使用它 很优雅的控制了竞争资源的安全访问 但是这种锁不区分读写 称这种锁为普通锁 为了提高性能 Java提供了读写锁 在读的地方使用读锁 在写的地方使用写锁 灵活控制 在一定程度上提高了程序的执行效率       Java中读写锁有个接口ncurrent locks ReadWriteLock 也有具体的实现ReentrantReadWriteLock 详细的API可以查看JavaAPI文档       下面这个例子是在文例子的基础上 将普通锁改为读写锁 并添加账户余额查询的功能 代码如下   import ncurrent ExecutorService; import ncurrent Executors; import ncurrent locks ReadWriteLock; import ncurrent locks ReentrantReadWriteLock; /** * Java线程 锁 * * @author leizhimin : : */ public class Test         public static void main(String[] args)                 //创建并发访问的账户                 MyCount myCount = new MyCount( );                 //创建一个锁对象                 ReadWriteLock lock = new ReentrantReadWriteLock(false);                 //创建一个线程池                 ExecutorService pool = Executors newFixedThreadPool( );                 //创建一些并发访问用户 一个信用卡 存的存 取的取 好热闹啊                 User u = new User( 张三 myCount lock false);                 User u = new User( 张三他爹 myCount lock false);                 User u = new User( 张三他弟 myCount lock false);                 User u = new User( 张三 myCount lock false);                 User u = new User( 张三他爹 myCount lock true);                 //在线程池中执行各个用户的操作                 pool execute(u );                 pool execute(u );                 pool execute(u );                 pool execute(u );                 pool execute(u );                 //关闭线程池                 pool shutdown();          /** * 信用卡的用户 */ class User implements Runnable         private String name;                //用户名         private MyCount myCount;        //所要操作的账户         private int iocash;                 //操作的金额 当然有正负之分了         private ReadWriteLock myLock;                //执行操作所需的锁对象         private boolean ischeck;        //是否查询         User(String name MyCount myCount int iocash ReadWriteLock myLock boolean ischeck)                 this name = name;                 this myCount = myCount;                 this iocash = iocash;                 this myLock = myLock;                 this ischeck = ischeck;                  public void run()                 if (ischeck)                         //获取读锁                         myLock readLock() lock();                         System out println( 读 + name + 正在查询 + myCount + 账户 当前金额为 + myCount getCash());                         //释放读锁                         myLock readLock() unlock();                  else                         //获取写锁                         myLock writeLock() lock();                         //执行现金业务                         System out println( 写 + name + 正在操作 + myCount + 账户 金额为 + iocash + 当前金额为 + myCount getCash());                         myCount setCash(myCount getCash() + iocash);                         System out println( 写 + name + 操作 + myCount + 账户成功 金额为 + iocash + 当前金额为 + myCount getCash());                         //释放写锁                         myLock writeLock() unlock();                           /** * 信用卡账户 可随意透支 */ class MyCount         private String oid;         //账号         private int cash;             //账户余额         MyCount(String oid int cash)                 this oid = oid;                 this cash = cash;                  public String getOid()                 return oid;                  public void setOid(String oid)                 this oid = oid;                  public int getCash()                 return cash;                  public void setCash(int cash)                 this cash = cash;                  @Override         public String toString()                 return MyCount +                                  oid= + oid + \\ +                                  cash= + cash +                                  ;            写 张三正在操作MyCountoid= cash= 账户 金额为 当前金额为 写 张三操作MyCountoid= cash= 账户成功 金额为 当前金额为 写 张三他弟正在操作MyCountoid= cash= 账户 金额为 当前金额为 写 张三他弟操作MyCountoid= cash= 账户成功 金额为 当前金额为 写 张三正在操作MyCountoid= cash= 账户 金额为 当前金额为 写 张三操作MyCountoid= cash= 账户成功 金额为 当前金额为 读 张三他爹正在查询MyCountoid= cash= 账户 当前金额为 写 张三他爹正在操作MyCountoid= cash= 账户 金额为 当前金额为 写 张三他爹操作MyCountoid= cash= 账户成功 金额为 当前金额为 Process finished with exit code       在实际开发中 最好在能用读写锁的情况下使用读写锁 而不要用普通锁 以求更好的性能   cha138/Article/program/Java/hx/201311/25525

相关参考

在紧急情况下可以解锁吗?

  在紧急情况下(对人身、系统、设备有直接威胁时),在确认操作步骤正确,当前操作设备正确的情况下,可经当班负责人同意后,先行解锁操作,事后补办解锁手续。

在紧急情况下可以解锁吗?

  在紧急情况下(对人身、系统、设备有直接威胁时),在确认操作步骤正确,当前操作设备正确的情况下,可经当班负责人同意后,先行解锁操作,事后补办解锁手续。

肋锁挤压试验(Eden test)

被检查者坐位、挺胸,肩外展15o。检查者下蹲,一手握住检查侧的手,另一手扪其桡动脉搏动。沿被检查上肢的纵轴,逐渐加力牵引,并记录桡动脉搏动的变化。在正常人群中,检查者用力牵引后,桡动脉搏动完全消失22

知识大全 如何加强新形势下非公企业和社会组织党建工作

如何加强新形势下非公企业和社会组织党建工作非公企业中的党组织是党的基层组织的重要组成部分,是职工群众的政治核心。要使其充分展现时代特征,以期在加速经济发展程序中充分迸发党的活动优势和强劲张力。党组织要

知识大全 华为p7不申请刷机解锁可以直接三键强行刷机吗

华为p7不申请刷机解锁可以直接三键强行刷机吗亲,是不可以的哦!我的华为p7电信版就是这样,在未解锁的情况下刷机,就变砖了!怎么也刷不回来了,拿到华为售后都刷不回来!所以请必须解锁再刷机吧!并且是未解锁

无力回天的技术特征

无力回天的技术特征技术特征:1、股价或指数走出上升楔形。多数情况下是:股价经过一段下跌后,出现强烈的技术性反弹,价格反弹至一定的水平高点即掉头下落,但回落点转前次为高,随后又回升创出新高点,即比上次反

知识大全 新零售有什么特征,适合哪些行业

新零售有什么特征,适合哪些行业,新零售适合哪些行业适合的有很多,具体有以下几类地产新零售、跨境电商新零售、母婴新零售、生鲜新零售、化妆品新零售、农产品新零售、零食新零售、家居新零售、酒店新零售、教育新

知识大全 中国经济新常态有哪些内涵或特征,特点

中国经济新常态有哪些内涵或特征,特点中国经济新常态的四个主要特征中高速。经济增速换挡回落、从过去10%左右的高速增长转为7%~8%的中高速增长是新常态的最基本特征。优结构。产业结构方面,第三产业逐步成

知识大全 新特征-阻塞队列

Java线程:新特征-阻塞队列  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 新特征-线程池

Java线程:新特征-线程池  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!