|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
[JAVA]nterrompere thread in pool
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: Codice:
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");
}
}
}
Ultima modifica di braian : 25-04-2008 alle 18:41. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
leggi bene la documentazione del metodo interrupt() la cui funzione non è esattamente quella di bloccare l' esecuzione di un thread.
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
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 |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:59.



















