Note that there are some explanatory texts on larger screens.

plurals
  1. POLong running methods from Java SDK for testing purposes
    text
    copied!<p>I'm working through some tutorials and examples of java.util.concurrent package. Usually example authors put a placeholder marked with a comment 'long running task'. Since these examples are about concurrent programming I'm not keen of using Thread.sleep(long), surrounded by try-catch blocks.</p> <p>What do you use in these circumstances?</p> <p>To open an url, do some complicated float math, i/o... Optimally these long running tasks do not have any side effects.</p> <p>These methods can be seen as Loren Ipsums on the timescale.</p> <hr> <p>I'll add here concrete implementations:</p> <pre><code>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 &lt; 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 &lt;= digits; ++i) arr[i] = ARRINIT; for (int i = digits; i &gt; 0; i-= 14) { int sum = 0; for (int j = i; j &gt; 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(); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload