博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis 并发处理,多线程以及synchronized锁的应用
阅读量:6908 次
发布时间:2019-06-27

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

package com.test.util.redis;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

public class RedisUtil implements Runnable {

    private JedisPool pool = null;

    public  volatile int count=0;

    /**

     * @功能:带参数的构造函数

     * @参数:host,主机名或主机IP

     * @参数:port,端口

     * @参数:password,访问Redis数据库的密码

     */

    public RedisUtil(String host, int port, String password) {

        if (pool == null) {

            JedisPoolConfig config = new JedisPoolConfig();

            // 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;

            // 如果赋值为-1,则表示不限制;如果pool已经分配了maxTotal个jedis实例,则此时pool的状态为exhausted(耗尽)。

            config.setMaxTotal(1);

            pool = new JedisPool(config, host, port, 60000, password);

        }

    }

    /**

     * @功能:通过Redis的key获取值,并释放连接资源

     * @参数:key,键值

     * @返回: 成功返回value,失败返回null

     */

    public String get(String key){

        Jedis jedis = null;

        String value = null;

        try {

            jedis = pool.getResource();

            value = jedis.get(key);

        } catch (Exception e) {

            pool.returnBrokenResource(jedis);

            e.printStackTrace();

        } finally {

            if(null != pool) {

                pool.returnResource(jedis);        

            }

        }

        return value;

    }

    /**

     * @功能:向redis存入key和value(如果key已经存在 则覆盖),并释放连接资源

     * @参数:key,键

     * @参数:value,与key对应的值

     * @返回:成功返回“OK”,失败返回“0”

     */

    public void set(String key,String value){

     Jedis jedis = null;

     synchronized(this){

     try{

     count=count+1;

                jedis = pool.getResource();

                jedis.set(key, value+count);

                System.out.println(jedis.get(key));

} catch (Exception e) {

// TODO Auto-generated catch block

 pool.returnBrokenResource(jedis);

             e.printStackTrace();

}finally {

            if(null != pool) {

                pool.returnResource(jedis);        

            }

        }

     }

    }

@Override

public void run() {

System.out.println(Thread.currentThread());

this.set("foo", "bar");

}

}

测试类:

package com.test.util.redis;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;

public class Jredis {

public static void main(String[] args) {

String host = "localhost";

        String password = null;

        int port = 6379;

        RedisUtil redisUtil = new RedisUtil(host, port, password);

        

        

        ExecutorService es=Executors.newFixedThreadPool(5);

        for(int i=0;i<20;i++){

         es.execute( redisUtil);

//         new Thread(redisUtil).start();

        }

es.shutdown();

try {

es.awaitTermination(100, TimeUnit.MILLISECONDS);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(" test  over");

        

        

}

}

      本文转自tianjian_0913 51CTO博客,原文链接:http://blog.51cto.com/tianjian/1915135,如需转载请自行联系原作者
你可能感兴趣的文章
ssh连接复用
查看>>
我的友情链接
查看>>
原生js弹窗
查看>>
修改Hosts文件
查看>>
Python基本概念
查看>>
网络工程师该何去何从
查看>>
TeXworks代码补全功能
查看>>
java+jsp+mysql网页制作总结(1)
查看>>
获取当前操作的IFrame 对象的方法
查看>>
年月日下拉选择三级联动(闰年判断),时间获取方法总结,特殊:获取当前月天数...
查看>>
Tallest Cow(POJ3263)
查看>>
POJ—Building a Space Station
查看>>
杭电oj Problem-1013 Digital Roots
查看>>
CRM 2013 切换显示语言
查看>>
Codeforces Round #544 (Div. 3) C. Balanced Team
查看>>
UML-对象图
查看>>
【leetcode】1037. Valid Boomerang
查看>>
一起学Android之Layout
查看>>
PHP网页计时工具——SESSION问题
查看>>
PHP 真正多线程的使用
查看>>