java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统

java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统

ID:32399546

大小:105.50 KB

页数:9页

时间:2019-02-04

java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统_第1页
java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统_第2页
java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统_第3页
java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统_第4页
java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统_第5页
资源描述:

《java核心知识点学习-线程中如何创建锁和使用锁lock设计一个缓存系统》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁?Locklock=newReentrantLock();2.如何使用锁?可以参看Lock文档,其使用格式如下:classX{privatefinalReentrantLocklock=newReentrantLock();//...publicvoidm(){lock.lock();//blockuntilconditionholdstry{//...methodbody}final

2、ly{lock.unlock()}}}在要用的方法前加上锁,比如写操作,然后在finally中将锁打开.这里,将前文java核心知识点学习----多线程并发之线程同步中的代码改用Lock实现数据同步,改写代码如下:packagecom.amos.concurrent;www.qqdianzan.comimportjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;/***@ClassName:LockTest*

3、@Description:Lock学习*@author:amosli*@email:hi_amos@outlook.com*@dateApr22,20141:48:36AM*/publicclassLockTest{publicstaticvoidmain(String[]args){newLockTest().init();}privatevoidinit(){finalOutPuteroutPuter=newOutPuter();//新建一个线程newThread(newRunnable(){publicvoi

4、drun(){while(true){//休息10mstry{Thread.sleep(10);}catch(InterruptedExceptione){e.printStackTrace();}outPuter.output("hi_amos");//输出}}}).start();newThread(newRunnable(){publicvoidrun(){while(true){try{Thread.sleep(10);}catch(InterruptedExceptione){e.printStackTr

5、ace();}www.qqtop1.comoutPuter.output("amosli");}}}).start();}staticclassOutPuter{//方式1:使用synchronized关键字//publicsynchronizedvoidoutput(Stringname){//intlength=name.length();//for(inti=0;i

6、;//}//方式2:使用Lock锁Locklock=newReentrantLock();publicvoidoutput(Stringname){lock.lock();//加锁intlength=name.length();//输出name,逐个字节读取,并输出try{for(inti=0;i

7、ed关键字与Lock的区别?1).Lock是Java5中的新特性,更加面向对象.更类似于生活中的锁.2).Lock锁一般需要手动开启和关闭,而synchronized则不需要.建议优先使用Lock.4.注意事项:1)多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥.2)要实现两个线程互斥,那么要将锁加到同一个被访问对象上.3)如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁,总之,读的时候用读锁,写的时候用写锁! 5.设计一个缓存系统什么是缓存系统?就是看本地是否已经缓存过此数据,如果已经缓存过,那

8、就直接拿来用;如果没有缓存过,那就查询数据库.下面看代码:privateMapcache=newHashMap();publicsynchronizedObjectgetData(Stringkey){Objectobject=cache.get(key);if(object==null){obje

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。