code: @Override
      public void receiveUpdate(INDArray array) {
          try {
              // we're replicating COMPRESSED MESSAGES, decompression will be thread-local
              for (int i = 0; i < parties; i++) {
                  // we don't want to have same workspace to be accessible by 2 different threads for now
                  /*
                      With synchronized external data, it's impossible to deadlock here.
                      Each worker is guaranteed to have at least NUM_WORKERS slots in buffer.
                      So we use this lock just to ensure thread-safety of corresponding workspaces
                  */
                  locks.get(i).lock();
  
                  try (MemoryWorkspace workspace = workspaces.get(i).notifyScopeEntered()) {
                      // we might just scope out of workspace here, instead of throwing error out
                      if (array.data().length() > (initialMemory / queueSize)
                                      / Nd4j.sizeOfDataType(array.data().dataType()))
                          throw new ND4JIllegalStateException("Not enough memory to handle update: ["
                                          + array.data().length() * Nd4j.sizeOfDataType(array.data().dataType())
                                          + " bytes required]. Please increase memory amount for GradientsAccumulator");
  
                      INDArray compressed = array.unsafeDuplication();
                      try {
                          messages.get(i).put(compressed);
                      } catch (InterruptedException e) {
                          Thread.currentThread().interrupt();
                          log.warn("Something bad at index_{}", i);
                          throw new RuntimeException(e);
                      }
                  }
  
                  locks.get(i).unlock();
              }
          } catch (Exception e) {
              throwable.setIfFirst(e);
              throw new RuntimeException(e);
          }
      }
docs: This method accepts updates suitable for StepFunction and puts them to the queue, which is used in backpropagation loop
  <p>
  PLEASE NOTE: array is expected to be ready for use and match params dimensionality
  
  @param array