private static void dataSubscription3() throws Exception {
    try (final SubscriptionTreeSession subscriptionSession =
        new SubscriptionTreeSession(HOST, PORT)) {
      subscriptionSession.open();
      final Properties config = new Properties();
      config.put(TopicConstant.FORMAT_KEY, TopicConstant.FORMAT_TS_FILE_HANDLER_VALUE);
      config.put(TopicConstant.MODE_KEY, TopicConstant.MODE_SNAPSHOT_VALUE);
      subscriptionSession.createTopic(TOPIC_3, config);
    }

    final List<Thread> threads = new ArrayList<>();
    for (int i = 0; i < PARALLELISM; ++i) {
      final int idx = i;
      final Thread thread =
          new Thread(
              () -> {
                // Subscription: builder-style ctor
                try (final SubscriptionTreePushConsumer consumer3 =
                    new SubscriptionTreePushConsumer.Builder()
                        .consumerId("c" + idx)
                        .consumerGroupId("cg3")
                        .ackStrategy(AckStrategy.AFTER_CONSUME)
                        .consumeListener(
                            message -> {
                              // do something for SubscriptionTsFileHandler
                              System.out.println(
                                  message.getTsFileHandler().getFile().getAbsolutePath());
                              return ConsumeResult.SUCCESS;
                            })
                        .buildPushConsumer()) {
                  consumer3.open();
                  consumer3.subscribe(TOPIC_3);
                  while (!consumer3.allTopicMessagesHaveBeenConsumed()) {
                    LockSupport.parkNanos(SLEEP_NS); // wait some time
                  }
                }
              });
      thread.start();
      threads.add(thread);
    }

    for (final Thread thread : threads) {
      thread.join();
    }
  }
multi push consumer subscribe topic with tsfile format and snapshot mode
example/session/src/main/java/org/apache/iotdb/SubscriptionSessionExample.java