如何通过并行执行快速地实现callable实现类多线程



我正在创建一个类( checkcon.java (,该类实现了可呼叫接口,该接口基本上返回NO。连接到网络的设备。问题在于,我不知道如何正确执行它,因为与传统的多线程相比,返回的结果确实很慢。我需要将值返回到( netscan.java (中的类。请帮助我正确执行它。checkcon.java的代码(可呼叫实现类(:

public class CheckCon implements Callable<Object>{
int startindex,endindex;
ArrayList<Object> list;
byte[] ip;
public CheckCon(int startindex, int endindex, byte[] ip) {
    this.startindex = startindex;
    this.endindex = endindex;
    this.ip = ip;
    list = new ArrayList<>();
}
@Override
public ArrayList<Object> call() throws Exception {
    for(int i =startindex;i<endindex;i++){
        try {
                        ip[3] = (byte)i;
                        InetAddress address = InetAddress.getByAddress(ip);
                        if (address.isReachable(1000))
                        { 
                           System.out.println("Name is......"+address.getHostName()+"tIP is......."+address.getHostAddress());
                        }
                        else if (!address.getHostAddress().equals(address.getHostName()))
                        {
                            String host = address.getCanonicalHostName();
                            String ipaddress =address.toString().replace(host+"/", "");
                            Object[] data = {host,ipaddress};
                            list.add(data);
                            System.out.println("Name is......"+address.getHostName()+"tIP is......."+address.getHostAddress());

                        }
                        else
                        {
                            System.out.println("nothing");
                            // the host address and host name are equal, meaning the host name could not be resolved
                        }           } catch (UnknownHostException ex) {
                        Logger.getLogger(NetScan.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IOException ex) {
                        Logger.getLogger(NetScan.class.getName()).log(Level.SEVERE, null, ex);
                    }
    }

    return list;
    }
}

和类调用netscan.java

  private void getDataForTable() throws InterruptedException, ExecutionException {
   ExecutorService executor =Executors.newCachedThreadPool();
    for(int i =0; i<26 ; i++){
       if(s == 250){
           Future<Object> f =executor.submit(new CheckCon(s,s+5,ip));
           list.add(f);
       break;
       }else{
           Future<Object> f =executor.submit(new CheckCon(s,s+10,ip));
           list.add(f);
           s= s+10;
       } 
    }

   dm = new DefaultTableModel(ColumnName,0){
        @Override
        public boolean isCellEditable(int row, int column) {
        return false;
        }
        };
   for(Future<Object> f : list){
       dm.addRow((Object[]) f.get());
   }}

我正在创建25个线程,在每个线程中检查10个IP。

我删除了CheckCon.java并编辑了NetScan,以获取我想要的东西,感谢 @amit-bera。我创建了一个线程,并通过定义我需要的线程的执行人向RunAsync询问了lunasync。

ExecutorService e =Executors.newFixedThreadPool(25);
    for(int i =0;i<255;i++){
        final int j =i;
    f =  CompletableFuture.runAsync(new Runnable() {
        @Override
        public void run() {

        try {
                        ip[3] = (byte)j;
                        InetAddress address = InetAddress.getByAddress(ip);
                        if (address.isReachable(1000))
                        { 
                           System.out.println("Name is......"+address.getHostName()+"tIP is......."+address.getHostAddress()+j);
                        }
                        else if (!address.getHostAddress().equals(address.getHostName()))
                        {
                            String host = address.getCanonicalHostName();
                            String ipaddress =address.toString().replace(host+"/", "");
                            Object[] data = {host,ipaddress};
                            dm.addRow(data);
                            System.out.println("Name is......"+address.getHostName()+"tIP is......."+address.getHostAddress()+j);

                        }
                        else
                        {
                            System.out.println("nothing"+j);
                            // the host address and host name are equal, meaning the host name could not be resolved
                        }           } catch (UnknownHostException ex) {
                        Logger.getLogger(NetScan.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IOException ex) {
                        Logger.getLogger(NetScan.class.getName()).log(Level.SEVERE, null, ex);
                    }
    }

    },e);   
        }

将此内容添加到方法中。

根据我的obervationa,请使用singolton java pettern.xample我在下面提供。Singoltonalwaus retun实例,因此您可以在线程上节省请求响应时间。

线程是轻度的过程,但每当需要时仍在启动线程。请确保该线程基于服务器Cromigrationa工作。如果您正在使用Linux系统二手 top 命令使用您的系统perfomance和Process Execution theadiwse。

我尝试并在系统上工作正常。

上课{

private static Singleton single_instance = null;
public String s;
private Singleton()
{
    s = "Hello I am a string part of Singleton class";
}
public static Singleton getInstance()
{
    if (single_instance == null)
        single_instance = new Singleton();
    return single_instance;
}

}

相关内容

  • 没有找到相关文章

最新更新