code: public int read_attribute_asynch(final DeviceProxy deviceProxy, final String[] attnames)
              throws DevFailed {
          checkIfTango(deviceProxy, "read_attributes_asynch");
  
          build_connection(deviceProxy);
  
          // Create the request object
          // ----------------------------------
          Request request;
          if (deviceProxy.device_5 != null) {
              request = deviceProxy.device_5._request("read_attributes_5");
              setRequestArgsForReadAttr(request, attnames, get_source(deviceProxy),
                      DevLockManager.getInstance().getClntIdent(), AttributeValueList_5Helper.type());
              request.exceptions().add(MultiDevFailedHelper.type());
          }
          else if (deviceProxy.device_4 != null) {
              request = deviceProxy.device_4._request("read_attributes_4");
              setRequestArgsForReadAttr(request, attnames, get_source(deviceProxy),
                      DevLockManager.getInstance().getClntIdent(), AttributeValueList_4Helper.type());
              request.exceptions().add(MultiDevFailedHelper.type());
          }
          else if (deviceProxy.device_3 != null) {
              request = deviceProxy.device_3._request("read_attributes_3");
              setRequestArgsForReadAttr(request, attnames, get_source(deviceProxy), null,
                  AttributeValueList_3Helper.type());
          }
          else if (deviceProxy.device_2 != null) {
              request = deviceProxy.device_2._request("read_attributes_2");
              setRequestArgsForReadAttr(request, attnames, get_source(deviceProxy), null,
                  AttributeValueListHelper.type());
          }
          else {
              request = deviceProxy.device._request("read_attributes");
              setRequestArgsForReadAttr(request, attnames, null, null,
                      AttributeValueListHelper.type());
          }
  
          // send it (defered or just one way)
          request.send_deferred();
  
          // store request reference to read reply later
          return ApiUtil.put_async_request(
                  new AsyncCallObject(request, deviceProxy, ATT_R, attnames));
      }
docs: ==========================================================================