Strumenti Utente

Strumenti Sito


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki