Ciao!
Ho un codice per fare delle prove sul funzionamento dei thread in Java. Non sono molto esperto, ma i due thread, creati da due oggetti diversi, dovrebbero essere indipendenti e agire su variabili indipendenti.
Dall'output del programma però non sembra che le cose vadano così, nonostante gli array hi[] separati (uno per ciascun oggetto) e i metodi dichiarati synchronized. A volte uno dei due array non viene inizializzato, a volte uno contiene soltanto una parte dei valori corretti. Perché succede questo? Come si può evitare?
Grazie,
Fabio
codice:package pack1; public class Thread1Example { public static void main(String[] args) { Writer w1 = new Writer("Thread1"); Writer w2 = new Writer("Thread2"); String[] arr = new String[10]; w1.setString(arr); w2.setString(arr); w1.start(); w2.start(); w1.printString(); w2.printString(); } } package pack1; public class Writer extends Thread { private volatile String[] hi = new String[10]; private String name1; public Writer(String nam) { super(nam); this.name1 = nam; } public synchronized void printString() { int n=0; System.out.println("This array belongs to " + this.name1); for(n=0;n<10;n++) { System.out.println(hi[n]); } } public void setString(String[] hii) { hi=hii; } public void run() { method1(); } public synchronized void method1() { int n=0; for(n=0;n<10;n++) { if(name1.compareTo("Thread1")==0) { hi[n]="yes"; try { } catch(Exception except) { System.out.print(except); } } else { hi[n]="no"; try { } catch(Exception except) { System.out.print(except); } } } } }
L'output è (e cambia quasi ogni volta che si esegue il programma):
codice:This array belongs to Thread1 null null null null null null null null null no This array belongs to Thread2 no no yes yes yes yes yes yes yes yes

, ma i due thread, creati da due oggetti diversi, dovrebbero essere indipendenti e agire su variabili indipendenti.
Rispondi quotando