我正在研究java.util.concurrent包的一些教程和示例。通常,示例作者將佔位符標記爲註釋「長時間運行的任務」。由於這些例子是關於併發編程的,我並不熱衷於使用Thread.sleep(long),它被try-catch塊所包圍。Java SDK中用於測試目的的長時間運行方法
你在這些情況下使用什麼?
要打開一個網址,請執行一些複雜的浮點運算,I/O ...最佳的是,這些長時間運行的任務沒有任何副作用。
這些方法可以看作是時間刻度上的羅蘭·伊普斯姆斯。
我會在這裏的具體實現:
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();
}
}
有提供無限多的緩慢算法。你的意圖是什麼?你想創建某種教程嗎? – akarnokd 2009-06-23 13:01:30
@ kd304 - 我相信他是在一個教程在這裏筆者離開它作爲「一個練習編輯器」生成長時間運行的任務 – akf 2009-06-23 13:11:24
@akf是灌裝,確實 – 2009-06-23 13:44:28