lpr-b:lpr-b-09:soluzioni
Questa è una vecchia versione del documento!
Alcune soluzioni proposte
Tasks e Threads Es 1
import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class PrintTask implements Runnable { private int id; private int max; private static Random generator = new Random(); public PrintTask(int id, int max) { this.id = id; this.max = max; } public void run() { for(int i = 0; i < max; i++) { System.out.println(i + "[Task" + id + "]"); try { Thread.sleep(generator.nextInt(1000)); }catch(InterruptedException exception) { exception.printStackTrace(); } } } public static void main(String[] args) { int nTasks = 5; int max = 10; if(args.length > 1) { nTasks = Integer.parseInt(args[0]); max = Integer.parseInt(args[1]); } ExecutorService threadExecutor = Executors.newCachedThreadPool(); for(int i = 0; i < nTasks; i++) threadExecutor.execute(new PrintTask(i, max)); threadExecutor.shutdown(); } }
Tasks e Threads Es 2
public class SleepTask implements Runnable { private long start = 0; private long end = 0; private final long SLEEP_TIME = 10000; public void run() { try { start = System.currentTimeMillis(); Thread.sleep(SLEEP_TIME); }catch(InterruptedException x) { end = System.currentTimeMillis(); System.out.println("TaskSleep - interrotto dopo " + (end - start) + " ms"); } } public static void main(String[] args) { final long MAX_TIME = 5000; SleepTask task = new SleepTask(); Thread t = new Thread(task); System.out.println("main - avvio il thread"); t.start(); try { Thread.sleep(MAX_TIME); }catch(InterruptedException x){} System.out.println("main - eseguo la interrupt sul thread"); t.interrupt(); System.out.println("main - fine del main"); } }
Tasks e Threads Es 3
public class PITask2 implements Runnable { private double piEstimate = 0.0; private long iteration = 0; private int sign = -1; private double accuracy; private Thread main; public PITask2(double accuracy, Thread main) { this.accuracy = accuracy; this.main = main; } public void run() { System.out.println("Valore di Math.PI = " + Math.PI); while(!Thread.currentThread().isInterrupted() && Math.abs(piEstimate - Math.PI) > accuracy) { iteration++; sign = -sign; piEstimate += sign * 4.0 / ((2 * iteration) - 1); } if(Math.abs(piEstimate - Math.PI) > accuracy) System.out.println("Thread interrotto"); else main.interrupt(); System.out.println("Valore calcolato di PI = " + piEstimate); } public static void main(String[] args) { double accuracy = 0.000000001; long sleepTime = 5000; if(args.length > 1) { accuracy = Math.pow(10, -1 * Integer.parseInt(args[0])); sleepTime = Integer.parseInt(args[1]) * 1000; } System.out.println("Accuracy = " + accuracy); PITask2 task = new PITask2(accuracy, Thread.currentThread()); Thread t = new Thread(task); t.start(); try { t.join(sleepTime); if(t.isAlive()) t.interrupt(); }catch(InterruptedException x) { System.out.println("Main interrotto"); } System.out.println("Fine main"); } }
lpr-b/lpr-b-09/soluzioni.1256241875.txt.gz · Ultima modifica: 22/10/2009 alle 20:04 (16 anni fa) da Andrea Corradini