code: public static PushedNotifications payload(Payload payload, Object keystore, String password, boolean production, int numberOfThreads, Object devices) throws Exception {
  		if (numberOfThreads <= 0) return sendPayload(payload, keystore, password, production, devices);
  		AppleNotificationServer server = new AppleNotificationServerBasicImpl(keystore, password, production);
  		List<Device> deviceList = Devices.asDevices(devices);
  		NotificationThreads threads = new NotificationThreads(server, payload, deviceList, numberOfThreads);
  		threads.start();
  		try {
  			threads.waitForAllThreads(true);
  		} catch (InterruptedException e) {
  		}
  		return threads.getPushedNotifications();
  	}
docs: Push a preformatted payload to a list of devices using multiple simulatenous threads (and connections).
  
  @param payload a simple or complex payload to push.
  @param keystore a keystore containing your private key and the certificate signed by Apple ({@link java.io.File}, {@link java.io.InputStream}, byte[], {@link java.security.KeyStore} or {@link java.lang.String} for a file path)
  @param password the keystore's password.
  @param production true to use Apple's production servers, false to use the sandbox servers.
  @param numberOfThreads the number of parallel threads to use to push the notifications
  @param devices a list or an array of tokens or devices: {@link java.lang.String String[]}, {@link java.util.List}<{@link java.lang.String}>, {@link javapns.devices.Device Device[]}, {@link java.util.List}<{@link javapns.devices.Device}>, {@link java.lang.String} or {@link javapns.devices.Device}
  @return a list of pushed notifications, each with details on transmission results and error (if any)
  @throws Exception thrown if any critical exception occurs