Bor*_*vić 5 java algorithm concurrency
我正在学习一些java.util.concurrent包的教程和示例.通常,示例作者将占位符标记为注释"长时间运行的任务".由于这些示例是关于并发编程的,所以我并不热衷于使用Thread.sleep(long),它被try-catch块包围.
你在这些情况下使用了什么?
要打开一个网址,做一些复杂的浮动数学,i/o ......最好这些长时间运行的任务没有任何副作用.
这些方法可以看作时间刻度上的Loren Ipsums.
我将在这里添加具体实现:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
BigInteger veryBig = new BigInteger(10000, new Random());
veryBig.nextProbablePrime();
Run Code Online (Sandbox Code Playgroud)