PDA

View Full Version : [JAVA]nterrompere thread in pool


braian
25-04-2008, 18:33
Apro questo 3d con una domanda ma mi sa che dovrò farne altre anche sebbene inerenti. Intanto chiedo questo:
come si fa ad interrompere un thread che fa parte di un pool?
io ho provato così ma non me lo interrompe:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
*
* @author Daniele
*/
public class Main {
ExecutorService executor;
ExecutorService executor2;
TaskClass tread1;
TaskClass tread2;
Thread task1;
Thread task2;

public Main(){
this.executor =Executors.newFixedThreadPool(2);
this.executor2=Executors.newFixedThreadPool(1);
this.tread1 = new TaskClass();
this.tread2 = new TaskClass();
this.task1 = new Thread(tread1);
this.task2 = new Thread(tread2);
executor.execute(task1);
executor2.execute(task2);

}

/**
* @param args the command line arguments
*/
@SuppressWarnings("static-access")
public static void main(String[] args) throws InterruptedException {

Main princ = new Main();
Thread t = new Thread();
t.sleep(4000);
princ.task1.interrupt();
if(princ.task1.isInterrupted())
{
System.out.println("ora interrotto");
}
System.out.println("fine");
}


public class TaskClass implements Runnable{

public void run() {
while(!Thread.interrupted()){

}
System.out.println("interrotto");
}

}
}


ovvero non appare la scritta "ora interrotto"
:help:

nuovoUtente86
25-04-2008, 19:00
leggi bene la documentazione del metodo interrupt() la cui funzione non è esattamente quella di bloccare l' esecuzione di un thread.

braian
27-04-2008, 09:42
Vi sarei davvero grato se poteste darmi qualche aiuto in più, non riesco a capire bene dalla documentazione.
Qual' è il problema del codice? COme mai non viene inviata/rilevata l' interruzione?
Grazie

braian
27-04-2008, 10:21
Forse sono arrivato a una conclusione...
interrupt() cambia solo un falg nel thread il quale flag può essere testato tramite isInterrupted() o interrupted().
La differenza che noto tra questi 2 metodi è che interrupted() rimette il flag al valore di default mentre isInterrupted non cambia il valore del flag.

Vi sarei grato di smentirmi qualora dicessi fesserie.
Grazie