多线程并发测试demo
1.测试类 mutiQuery.java
/** * 多线程并发访问 * @author HUAWEI * */ public class mutiQuery { // 自定义工作线程 private static class Worker extends Thread { private CyclicBarrier cyclicBarrier; private userController remoteHandler; public Worker(CyclicBarrier cyclicBarrier,userController remoteHandler) { this.cyclicBarrier = cyclicBarrier; this.remoteHandler = remoteHandler; } @Override public void run() { super.run(); try { System.out.println(Thread.currentThread().getName() + "开始等待其他线程"); cyclicBarrier.await(); System.out.println(Thread.currentThread().getName() + "开始执行"); // 工作线程开始处理,这里用Thread.sleep()来模拟业务处理 userController.getuserid(10); System.out.println(Thread.currentThread().getName() + "执行完毕"); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { userController remoteHandler = userController.getinstance(); int threadCount = 10; CyclicBarrier cyclicBarrier = new CyclicBarrier(threadCount); for (int i = 0; i < threadCount; i++) { System.out.println("创建工作线程" + i); Worker worker = new Worker(cyclicBarrier,remoteHandler); worker.start(); } } }
2.userController类
package com.cn; import java.util.List; import com.cn.dao.userdao; import com.cn.db.usertable; import redis.clients.jedis.Jedis; public class userController { private static userdao dao = new userdao(); private static Jedis jedis = new Jedis("127.0.0.1"); private static userController test = new userController(); private userController(){ jedis.connect(); } public static userController getinstance(){ return test; } public static void getuserid(int id) { synchronized (jedis) { Object obj = readcache("findbyid("+id+")","hash"); if(null == obj){ usertable iduser = findbyid(10); String key = "findbyid(10)"; docache(key, iduser,"hash"); System.out.println("data from db"); System.out.println(iduser); System.out.println("=========================\n"); }else{ String iduser = (String)obj; System.out.println("data from cache"); System.out.println(iduser); System.out.println("=========================\n"); } } } public static boolean allnovalue(Object obj){ List<Object> arr = (List<Object>)obj; boolean flag = true; for(Object t:arr){ if(t!=null){ flag = false; break; } } return flag; } public static void docache(String key,Object data,String type){ if(type.equals("hash")){ usertable data1 = (usertable)data; jedis.hset(key,"userdata", data1.toString()); }else if(type.equals("list")){ } System.out.println("cache success!"); } public static Object readcache(String key,String type){ Object obj = null; if(type.equals("hash")){ obj = jedis.hget(key,"userdata"); }else if(type.equals("list")){ } System.out.println("read success!"); return obj; } public static usertable findbyid(int id){ return dao.getuserbyid(id); } public static List<usertable> findall(){ return dao.getallusers(); } }