本帖最后由 wyshp 于 2014-06-04 12:11:19 编辑

解决方案 »

  1.   

    纳尼。。什么意思,你要把那一块做成多线程并发,你得说清楚啊
    比如while里面都做成多线程并发就是这样:int index = 1;
    int client_num = 1000;
        while(index < client_num){
            System.out.println(index  + " = " + client_num);
            new Thread(new Runnable(){
             public void run() {
            // 业务逻辑处理
            ServiceConfigBean config  = new ServiceConfigBean();
            int NO = (int) (Math.random() * 100) + 1;
            config.setServiceID("service" + NO);
            config.setVersion("1.0");
            config.setIp("192.168.1.100");
            config.setPort(index);
            config.setTactics("");
            try {
                client.registerService(config);                   
            } catch (TException e) {
                e.printStackTrace();
            }
            }
          }).start();
         index++;           
    }
      

  2.   

    嗯,就是这么个意思,不过你这样弄的话性能太低了,这样一搞就有client_num 数量级个线程了
      

  3.   

    可以先搞一个线程池,并在系统启动时已经建立好这些线程,这样既可以提高效率,又能有效控制线程的多少,代码如下:public class ServiceExecutor implements InitializingBean {
    //线程池大小
    private final int poolSize = 20;
    private ExecutorService service;
    public ExecutorService getService() {
    return service;
    }
    public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
    throws InterruptedException {
    return service.invokeAll(tasks);
    }
    public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException,
    ExecutionException {
    return service.invokeAny(tasks);
    }
    public int getPoolSize() {
    return poolSize;
    }
    @Override
    public void afterPropertiesSet() throws Exception {
    service = Executors.newFixedThreadPool(poolSize);
    }
    }public class Xxxx<T>{
    @Autowired
    private ServiceExecutor serviceExecutor;
            
            publc void registerService(){
                         int index = 1;
                          int client_num = 1000;
                        while(index < client_num){
                           addService();
                        }
            }        public void addService(){
                 Callable<T> service =  new Callable<T>() {

    @Override
    public T call() throws Exception {
                                    //逻辑.....
                                    //...
                                    client.registerService(config);
    return null;
    }
    });
                   serviceExecutor.getService().submit(service);
            }}
      

  4.   


    public static void main(){
        Executor executor = Executors.newFixedThreadPool(5);  
    Runnable task = new Runnable() {  
        @Override  
        public void run() {         
         while(index < client_num){
    addService();    // 此行代码为毛不执行
    index++;
    }
        }  
    };  
    executor.execute(task);
    }public void addService(){
    ServiceConfigBean config  = new ServiceConfigBean();
         int NO = (int) (Math.random() * 100) + 1;
    config.setServiceID("timeStampServer" + NO);
    config.setVersion("1.0");
    config.setIp("192.168.1.100");
    config.setPort(index);
    config.setTactics("");
    try {
    client.registerService(config);
    } catch (TException e) {
    e.printStackTrace();
    }
    }
    求解:参考上面两位大师的思路,自己弄了一下,代码如上,为毛跑不通呢,是不是写的有问题?
      

  5.   

    你把while条件以及index++提到外面来写试试
      

  6.   

    其实把while条件以及index++提到外面来写跟1楼那位兄台写的一个效果。
      

  7.   


     ServiceConfigBean config  = new ServiceConfigBean();
            int NO = (int) (Math.random() * 100) + 1;
            config.setServiceID("service" + NO);
            config.setVersion("1.0");
            config.setIp("192.168.1.100");
            config.setPort(8888);
            config.setTactics("");
            try {
                dao.registerService(config);                   //  该行代码是执行保存注册信息的。
            } catch (TException e) {
                e.printStackTrace();
            }其实我主要是想把这一部分的业务代码(当然业务信息可能是不同的,比如端口/IP)并发插入N次。