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(); } }