Java多线程进一步的理解之------------缓存机制
public class CacheDemo { private Map<String,Object> cache = new HashMap<String,Object>(50); public static void main(String[] args) { } /* * 多个线程的并发执行,保证数据正确 * */ private ReadWriteLock rwl = new ReentrantReadWriteLock(); public Object getData(String key) { rwl.readLock().lock();// 加读锁,都可以读, Object value = null; try{ value = cache.get(key); if (value == null) { rwl.readLock().unlock(); // 释放读锁,都不可以读,让第一个线程去数据库中查数据,查好后输出, rwl.writeLock().lock(); // 加写锁,只有第一个线程可以加写锁添加成功, try { if (value == null) { // 保证不让后来的线程去加写锁 value = "aaaa";// 这是从数据库中取得值 } }finally { rwl.writeLock().unlock(); // 第一个线程释放写锁 } rwl.readLock().lock(); // 进而去读。其他线程开始加写锁,最后也会被释放 } }finally { rwl.readLock().unlock(); } return value; } } 要实现一个缓存并不是那么容易的,要考虑很多种情况
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java多线程进一步的理解之------------线程池
public class ThreadPoolTest { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 1; i <=10 ; i++) { final int task = i; executorService.execute(new Runnable() { @Override public void run() { for (int j = 1; j <= 10; j++) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " is for " + " j= " + j +" task = " + task); } } }); } //executor...
- 下一篇
第11章—使用对象关系映射持久化数据—SpringBoot+SpringData+Jpa进行查询修改数据库
SpringBoot+SpringData+Jpa进行查询修改数据库 JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它又不限于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。 JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术: ORM映射元数据 JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; API 用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。 查询语言 这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。 例子:SpringBoot+SpringD...
相关文章
文章评论
共有0条评论来说两句吧...