@Override public void run() { i2pReceiver.addPacketListener(this); bootstrap(); replicateThread.start(); while (!Thread.interrupted()) { try { if (bucketManager.getUnlockedPeerCount() == 0) { log.info("All peers are gone. Re-bootstrapping."); bootstrap(); } refreshOldBuckets(); TimeUnit.MINUTES.sleep(1); } catch (InterruptedException e) { break; } catch (RuntimeException e) { // catch unexpected exceptions to keep the thread running log.error("Exception caught in KademliaDHT loop", e); } } replicateThread.interrupt(); i2pReceiver.removePacketListener(this); writePeersSorted(peerFile); log.debug("KademliaDHT thread exiting."); } }