多线程并发测试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("=========================
");
            }else{
                String iduser = (String)obj;
                System.out.println("data from cache");
                System.out.println(iduser);
                System.out.println("=========================
");
            }
        }
    }
    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();
    }

}
原文地址:https://www.cnblogs.com/g177w/p/12511939.html