在Java中并行执行代码

时间:2014-02-11 17:57:46

标签: java multithreading asynchronous concurrency parallel-processing

我有这个非常基本的脚本执行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());

1 个答案:

答案 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());
    }
}

但是,这不能保证使用多个线程。您将其留给执行者服务部门来决定最佳状态。