Java SDK中用于测试目的的长时间运行方法

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)


kgi*_*kis 3

我曾经使用过公钥-私钥生成器来做类似的事情。这是一个 CPU 密集型任务。执行数百或数千次应该会给您带来相当大的延迟。