0

我有这个非常基本的脚本来执行Redis服务器请求,但我不明白多线程足以使其成功并行运行。这是我在我的main()方法在Java中并行执行代码

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

回答

2

Multithreadding和并发在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()); 
    } 
} 

但是,这也不能保证使用多线程。你正在让执行者服务决定如何做到最好。