1、是否能动态注册消费器? 不能 private static void disruptor(ExecutorService executorService) { Disruptor<FilePack> disruptor = new Disruptor<>( new EventFactory<FilePack>() { @Override public FilePack newInstance() { return new FilePack(); } }, 1024, executorService, ProducerType.SINGLE, new SleepingWaitStrategy() ); RingBuffer<FilePack> ringBuffer = disruptor.getRingBuffer(); disruptor.start(); // 启动后开始注册 disruptor.handleEventsWith(new EventHandler<FilePack>() { @Override public void onEvent(FilePack event, long sequence, boolean endOfBatch) throws Exception { System.out.println(event.getPath()); } }); for (int i = 0; i <10; i++) { long sequence = ringBuffer.next(); FilePack filePack = ringBuffer.get(sequence); filePack.setPath(String.valueOf(i)); filePack.setData(new byte[0]); ringBuffer.publish(sequence); } disruptor.shutdown(); } 报错 java.lang.IllegalStateException: All event handlers must be added before calling starts. 2、是否可重用线程? 可以 @Test public void testReuse() { ExecutorService executorService = Executors.newSingleThreadExecutor(new NamedThreadFactory("", true)); // 内部 shutdown disruptor disruptor(executorService); disruptor(executorService); System.out.println(); } 发现第二次依旧可以正常消费,所以,如果传入线程池,会重用线程的。