redis多线程java_【并发】7、借助redis 实现多线程生产消费队列

packagequeue.redisQueue;importorg.junit.Before;importorg.junit.Test;importredis.clients.jedis.Jedis;importredis.clients.jedis.JedisPool;importredis.clients.jedis.JedisPoolConfig;importjava.io.IOException;/*** @ProjectName: cutter-point

* @Package: queue.redisQueue

* @ClassName: RedisQueueTest

* @Author: xiaof

* @Description: ${description}

* @Date: 2019/6/12 10:09

* @Version: 1.0*/

public classRedisQueueTest {public static JedisPool jedisPool = null;public staticJedis jedis;

@Beforepublic voidtest0() {//静态块,初始化加载,看来fQueue并不支持多进程操作,但是多线程是支持的

try{if(jedisPool == null) {

JedisPoolConfig jedisPoolConfig= newJedisPoolConfig();

jedisPoolConfig.setMaxTotal(10000);

jedisPoolConfig.setMaxIdle(2000);

jedisPoolConfig.setMaxWaitMillis(2000);

jedisPoolConfig.setTestOnBorrow(true);

jedisPoolConfig.setTestOnReturn(true);

jedisPool= new JedisPool(jedisPoolConfig, "127.0.0.1", 17399, 2000, "ZTE$soft987", 0);

}if(jedis == null) {

jedis=jedisPool.getResource();

}

}catch(Exception e) {

e.printStackTrace();

}

}

@Testpublic void test1() throwsInterruptedException {//读写取数据

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

System.out.println("输出测试" +i);

RedisQueueProducter producter= new RedisQueueProducter(jedisPool.getResource(), "xiaof");

Thread t= newThread(producter);

t.start();

}while(true) {

Thread.sleep(1000);

}

}

@Testpublic void test2() throwsInterruptedException {//读写取数据

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

System.out.println("输出测试" +i);//切记一定要重新获取Resource,不然无法并发操作

RedisQueueConsume fqueueConsume = new RedisQueueConsume(jedisPool.getResource(), "xiaof");

Thread t= newThread(fqueueConsume);

t.setDaemon(true);

t.start();

}while(true) {

Thread.sleep(1000);

}

}

}


版权声明:本文为weixin_42373997原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。