我有这个非常基本的脚本执行Redis服务器请求但是我不太了解多线程以便成功地使它并行运行。这就是我在main()
方法
Jedis jedis1 = new Jedis("10.10.25.54", 6381);
Jedis jedis2 = new Jedis("10.10.25.54", 6382);
Jedis jedis3 = new Jedis("10.10.25.54", 6383);
Jedis jedis4 = new Jedis("10.10.25.54", 6384);
Jedis jedis5 = new Jedis("10.10.25.54", 6385);
Jedis jedis6 = new Jedis("10.10.25.54", 6386);
Jedis jedis7 = new Jedis("10.10.25.54", 6387);
Jedis jedis8 = new Jedis("10.10.25.54", 6388);
// The bit i would like to learn how run in parallel
//
System.out.println(jedis1.eval(SCRIPT, 0).toString());
System.out.println(jedis2.eval(SCRIPT, 0).toString());
System.out.println(jedis3.eval(SCRIPT, 0).toString());
System.out.println(jedis4.eval(SCRIPT, 0).toString());
System.out.println(jedis5.eval(SCRIPT, 0).toString());
System.out.println(jedis6.eval(SCRIPT, 0).toString());
System.out.println(jedis7.eval(SCRIPT, 0).toString());
System.out.println(jedis8.eval(SCRIPT, 0).toString());
答案 0 :(得分:2)
多线程和并发在Java中是一个相当大的主题,在单个问题中无法回答,并且有许多可能的解决方案。不过我建议您阅读Orical Concurrency tutorials。
我的方法是:
ExecutorService es = Executors.newCachedThreadPool();
es.submit(new RunJedis(jedis1));
es.submit(new RunJedis(jedis2));
es.submit(new RunJedis(jedis3));
es.submit(new RunJedis(jedis4));
es.submit(new RunJedis(jedis5));
es.submit(new RunJedis(jedis6));
es.submit(new RunJedis(jedis7));
es.submit(new RunJedis(jedis8));
class RunJedis{
Jedis jedis;
RunJedis(Jedis jedis1){
this.jedis=jedis1;
}
void run(){
System.out.println(jedis.eval(SCRIPT, 0).toString());
}
}
但是,这不能保证使用多个线程。您将其留给执行者服务部门来决定最佳状态。