code: public Waiter<DescribeDBInstancesRequest> dBInstanceAvailable() {
  
          return new WaiterBuilder<DescribeDBInstancesRequest, DescribeDBInstancesResult>()
                  .withSdkFunction(new DescribeDBInstancesFunction(client))
                  .withAcceptors(new DBInstanceAvailable.IsAvailableMatcher(), new DBInstanceAvailable.IsDeletedMatcher(),
                          new DBInstanceAvailable.IsDeletingMatcher(), new DBInstanceAvailable.IsFailedMatcher(),
                          new DBInstanceAvailable.IsIncompatiblerestoreMatcher(), new DBInstanceAvailable.IsIncompatibleparametersMatcher())
                  .withDefaultPollingStrategy(new PollingStrategy(new MaxAttemptsRetryStrategy(60), new FixedDelayStrategy(30)))
                  .withExecutorService(executorService).build();
      }
docs: Builds a DBInstanceAvailable waiter by using custom parameters waiterParameters and other parameters defined in
  the waiters specification, and then polls until it determines whether the resource entered the desired state or
  not, where polling criteria is bound by either default polling strategy or custom polling strategy.