Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema con Thread

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213

    Problema con Thread

    Ho copiato questo codice da un libro per imparare i tread.Però il codice dà errore e non capisco perchè.Potete aiutarmi?
    [CODE]
    public class ThredPriority implements Runnable {


    CounterThread thread1 = new CounterThread();
    CounterThread thread2 = new CounterThread();
    Thread thisThread = new Thread(this);
    int duration;


    public ThredPriority(int priority1, int priority2,int duration) {
    this.duration = duration;
    thisThread.setPriority(Thread.MAX_PRIORITY);
    thread1.setPriority(priority1);
    thread2.setPriority(priority2);
    thread1.start();
    thread2.start();
    thisThread.start();
    }


    public void run() {
    try {
    for (int i = 0; i < duration; i++){
    System.out.println("Thread1: priority: " + thread1.getPriority() + " count: " + thread1.count);
    System.out.println("Thread2: priority: " + thread2.getPriority() + " count: " + thread2.count);
    thisThread.sleep(1000);
    }
    }
    catch (InterruptedException e){}
    thread1.terminate();


    }


    public static void main(String[] args) {
    new ThredPriority(Integer.parseInt(args[0]),Integer.parseInt(args[1]), Integer.parseInt(args[2]));
    }
    }

    Questa è la classe CounterThread
    [CODE]
    public class CounterThread extends Thread {

    boolean terminated = false;
    int count = 0;
    public void run() {
    while (!terminated) {
    count++;
    for (int i = 0; i < 1000; i++) {




    }
    }
    }


    public void terminate() {
    terminated = true;
    }




    public int getCount() {
    return count;
    }
    }




    L'errore che dà è:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at ThredPriority.main(ThredPriority.java:30)
    Quello che non capisco è nonostante viene passato un Integer al metodo new Thread, che valore ha l'Integer e sopratutto dove lo prende se viene passato un arg[0] e via dicendo?
    Ultima modifica di tonino1; 25-06-2016 a 17:04

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Ho copiato questo codice da un libro per imparare i tread.Però il codice dà errore e non capisco perchè.Potete aiutarmi?
    codice:
    public class ThredPriority implements Runnable {
    
    
    CounterThread thread1 = new CounterThread();
    CounterThread thread2 = new CounterThread();
    Thread thisThread = new Thread(this);
    int duration;
    
    
    public ThredPriority(int priority1, int priority2,int duration) {
    this.duration = duration;
    thisThread.setPriority(Thread.MAX_PRIORITY);
    thread1.setPriority(priority1);
    thread2.setPriority(priority2);
    thread1.start();
    thread2.start();
    thisThread.start();
    }
    
    
    public void run() {
    try {
    for (int i = 0; i < duration; i++){
    System.out.println("Thread1: priority: " + thread1.getPriority() + " count: " + thread1.count);
    System.out.println("Thread2: priority: " + thread2.getPriority() + " count: " + thread2.count);
    thisThread.sleep(1000);
    }
    }
    catch (InterruptedException e){}
    thread1.terminate();
    
    
    }
    
    
    public static void main(String[] args) {
    new ThredPriority(Integer.parseInt(args[0]),Integer.parseInt(args[1]), Integer.parseInt(args[2]));
    }
    }
    Questa è la classe CounterThread
    codice:
    public class CounterThread extends Thread {
    
    boolean terminated = false;
    int count = 0;
    public void run() {
    while (!terminated) {
    count++;
    for (int i = 0; i < 1000; i++) {
    
    
    
    
    }
    }
    }
    
    
    public void terminate() {
    terminated = true;
    }
    
    
    
    
    public int getCount() {
    return count;
    }
    }

    L'errore che dà è:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at ThredPriority.main(ThredPriority.java:30)
    Quello che non capisco è nonostante viene passato un Integer al metodo new Thread, che valore ha l'Integer e sopratutto dove lo prende se viene passato un arg[0] e via dicendo?




  3. #3
    Penso che dipenda dal fatto che non inserisci alcun argomento da linea di comando.
    args[0], args[1], args[2], args[3], ....sono parametri che vengono da linea di comando,
    quando richiami da linea di comando farai:
    java ThredPriority 3 5 3000
    ma se programmi da un IDE difficilmente ti verrà lo stimolo di mettere dei parametri alla linea di comando.
    Altrimenti sostituisci gli args con dei numeri, li prendi con uno System.in o con un JOptionPane, ci sono vari metodi per caricare valori in un programma java.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    In effetti avevo già provato a inserire i parametri da linea di comando. E non succedeva nulla. Poi ho trovato un errore forse di battitura. Nella classe ConterThread era settato male il ciclo while dove veniva verificata la variabile terminated che risultava sempre vera.Infatti il ciclo andava in loop. Adessso devo verificare il resto, perchè provando con diversi parametri mi dà sempre lo stesso risultato. Grazie lo stesso.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.