Я работаю над некоторыми учебными пособиями и примерами пакета java.util.concurrent. Обычно авторы примеров помещают заполнитель, помеченный комментарием как «длительное задание». Поскольку эти примеры посвящены параллельному программированию, я не заинтересован в использовании Thread.sleep (long), окруженного блоками try-catch.
Что вы используете в этих обстоятельствах?
Чтобы открыть URL-адрес, сделайте несколько сложных вычислений с плавающей точкой, ввод / вывод ... Оптимально, что эти длительные задачи не имеют побочных эффектов.
Эти методы можно рассматривать как Лорен Ипсумс на временной шкале.
Я добавлю сюда конкретные реализации:
import java.math.BigInteger;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.util.Random;
public class LongRunningTasks {
public void triggerKeyGeneration(int iterations) {
try {
long start = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
KeyPairGenerator keyGen =
KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random =
SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
keyGen.generateKeyPair();
}
System.out.println("triggerKeyGeneration: " + (System.currentTimeMillis() - start));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
}
}
private static final int SCALE = 10000;
private static final int ARRINIT = 2000;
/**
* http://www.codecodex.com/wiki/index.php?title=Digits_of_pi_calculation#Java
*
* @param digits - returns good results up to 12500 digits
* @return
*/
public String piDigits(int digits){
StringBuffer pi = new StringBuffer();
int[] arr = new int[digits + 1];
int carry = 0;
for (int i = 0; i <= digits; ++i)
arr[i] = ARRINIT;
for (int i = digits; i > 0; i-= 14) {
int sum = 0;
for (int j = i; j > 0; --j) {
sum = sum * j + SCALE * arr[j];
arr[j] = sum % (j * 2 - 1);
sum /= j * 2 - 1;
}
pi.append(String.format("%04d", carry + sum / SCALE));
carry = sum % SCALE;
}
return pi.toString();
}
private static final Random rand = new Random();
private static final BigInteger veryBig = new BigInteger(1200, rand);
public BigInteger nextProbablePrime() {
return veryBig.nextProbablePrime();
}
}