Я пишу Java-приложение, которое будет хэшировать серию входных значений несколько раз, пока не будет выполнено условие. Я достиг этого, вложив ряд операторов if / else в цикл while. Я хочу, чтобы можно было печатать скорость хэширования на терминал каждые 3 секунды, пока приложение активно хэширует, и не повторно, пока не будет выполнено условие. Я пытался использовать ExecutorService и планировать TimerTask, но ни один из них не работал так, как я хотел, чтобы они оба продолжали выполняться после выполнения условия, которое должно было их остановить. Я знаю, что что-то упустил, но не знаю что):
Я включил небольшой фрагмент, не стесняйтесь спрашивать любую информацию, которая может показаться вам актуальной.
Любая помощь будет принята с благодарностью!
Я пытался использовать TimerTask следующим образом:
while(iterator) {
if (difficulty == 1) {
if (!hash.startsWith("0")) {
long updatedTime = System.nanoTime();
Nonce++;
long deltaN = updatedTime - startTime;
long deltaS = (deltaN / 1000000000);
long hashRate = (Nonce / deltaS);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Current hash rate: " + hashRate + " " + "hash/s");
}
}, 0, 3000);
} else {
System.out.println("Valid hash found! " + hash);
iterator = false;
}
}
}
РЕДАКТИРОВАТЬ: То, что это будет, когда закончено, по сути, является дрянной «цепочкой блоков», которую я буду использовать для иллюстративных целей в качестве учебного пособия, имея в виду, что я включил остальную часть метода «майнера» ниже:
public void miner(long index, long currentTimeMillis, long data, long Nonce, String previousBlockHash, int difficulty) throws InterruptedException {
this.index = index;
this.currentTimeMillis = currentTimeMillis;
this.pszTimeStamp = pszTimeStamp;
this.Nonce = Nonce;
this.previousBlockHash = previousBlockHash;
this.difficulty = difficulty;
this.data = data;
boolean iterator = true;
String blockHeader = (index + currentTimeMillis + data + Nonce + previousBlockHash + difficulty);
String hash = SHA256.generateHash(blockHeader);
long startTime = System.nanoTime();
TimeUnit.SECONDS.sleep(2);
while (iterator) {
blockHeader = (index + currentTimeMillis + data + Nonce + previousBlockHash + difficulty);
hash = SHA256.generateHash(blockHeader);
if (difficulty == 1) {
if (!hash.startsWith("0")) {
long updatedTime = System.nanoTime();
Nonce++;
long deltaN = updatedTime - startTime;
long deltaS = (deltaN / 1000000000);
long hashRate = (Nonce / deltaS);
System.out.println("Current hash rate: " + hashRate
} else {
System.out.println("\n");
System.out.println("Hash found! \n");
System.out.println("Mined block hash: \n" + hash);
}
} else if (difficulty == 2) {
...........
Все параметры, которые принимает метод 'miner', передаются ему классом запуска, который включает в себя функцию main. Моя цель состоит в том, чтобы иметь возможность печатать скорость хэширования при поиске «действительного» хеша каждые несколько секунд вместо того, чтобы печатать тысячи раз в секунду.