博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis (六)结合多线程实现模拟缓存
阅读量:3906 次
发布时间:2019-05-23

本文共 3664 字,大约阅读时间需要 12 分钟。

模拟多线程实现一级缓存

设置两个线程,均用于实现查询功能,一级缓存默认打开,不打开二级缓存

package test;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.apache.ibatis.session.SqlSessionManager;import mapper.AuthorMapper;import po.Author;/** * 结合多线程实现模拟一级缓存 * 设置了两个线程,两个线程均用于查询,查询的是不同的内容 * @author baka */public class test1{	private static SqlSession session;	public static SqlSession getSqlSessionTest() {		if (session == null) {			String resource = "SqlMapperConfig.xml";			InputStream iStream = test1.class.getClassLoader().getResourceAsStream(resource);			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);			session = factory.openSession();		}		return session;	}	//从线程	static class Run implements Runnable{		@Override		public void run() {			try {				//获取到操作author表的映射类				AuthorMapper authorMapper = getSqlSessionTest().getMapper(AuthorMapper.class);  				Author author = authorMapper.selectByPrimaryKey(1);				System.out.println("-----------------------------------------------");				System.out.println("从线程:" + author.toString());				Thread.sleep(10);			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}	//主线程	public static void main(String[] args) throws InterruptedException {		Run run = new Run();		for (int i = 0; i < 10; i++) {			Thread thread = new Thread(run);			//获取到操作author表的映射类			AuthorMapper authorMapper = getSqlSessionTest().getMapper(AuthorMapper.class);  			Author author1 = new Author(1, "baka", i+"123", null, null);			authorMapper.updateByPrimaryKey(author1);			session.commit();			Author author = authorMapper.selectByPrimaryKey(2);			System.out.println("-----------------------------------------------");			System.out.println("主线程:" + author.toString());			thread.sleep(10);			thread.start();		}	}}

模拟多线程实现二级缓存

设置两个线程,均用于实现查询功能,打开二级缓存

注意,查询之后一定要将一级缓存刷入至二级缓存,不然命中率将为0

package test;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.apache.ibatis.session.SqlSessionManager;import mapper.AuthorMapper;import po.Author;/** * 结合多线程实现模拟二级缓存,设置了两个线程, * 两个线程均用于查询 * @author baka */public class test2 {	private static String resource = "SqlMapperConfig.xml";	private static InputStream iStream = test1.class.getClassLoader().getResourceAsStream(resource);	private static SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);	// 从线程	static class Run implements Runnable {		@Override		public void run() {			try {				SqlSession session = factory.openSession();				AuthorMapper authorMapper = session.getMapper(AuthorMapper.class);				Author author = authorMapper.selectByPrimaryKey(1);				session.close();  //一级缓存刷入二级缓存				System.out.println("从线程:" + author.toString());				Thread.sleep(10);			} catch (InterruptedException e) {				e.printStackTrace();			}			System.out.println("--------------------------------------");		}	}	// 主线程	public static void main(String[] args) throws InterruptedException {		Run run = new Run();		for (int i = 0; i < 10; i++) {			Thread thread = new Thread(run);			SqlSession session = factory.openSession();			AuthorMapper authorMapper = session.getMapper(AuthorMapper.class);			Author author = authorMapper.selectByPrimaryKey(2);			session.close();   //一级缓存刷入二级缓存			System.out.println("主线程:" + author.toString());			thread.sleep(10);			thread.start();			System.out.println("--------------------------------------");		}	}}

转载地址:http://dsqen.baihongyu.com/

你可能感兴趣的文章
以前写的jsp页面内容
查看>>
以前写的jsp页面
查看>>
以前的代码1
查看>>
以前写的struts配置文件
查看>>
apache common简介1
查看>>
apache common 工具(怎样可以编写更少的代码)
查看>>
用maven构建项目
查看>>
Spring集成ActiveMQ配置
查看>>
Luence认识1
查看>>
ant项目构建
查看>>
用Ant构建Java项目
查看>>
eclipse导入ant工程
查看>>
Ant创建项目模板demo
查看>>
LUCENE入门
查看>>
inner join 和outer join知识
查看>>
如何提高数据库查询速度
查看>>
web并发访问的问题
查看>>
webWeb性能优化方案
查看>>
Maven settings
查看>>
存储过程1
查看>>