Ecco il codice: genero 4 Thread che hanno Ognuno il proprio oggetto PrintWriter però accedono allo stesso file, nell'esecuzione del programma tutto funziona perfettamente solo che non so se è un caso oppure l'accesso al file in qualche modo è già gestito dalla JVM facendo entrare un Thread alla volta.
codice:
import java.net.*;
import java.io.*;
public class SportelloThread implements Runnable{
private Tagliando temp=null;
private int name=0;
private SportelloThreadGrafico g;
public SportelloThread(int n,SportelloThreadGrafico h){
g=h;
name=n;
}
public void run(){
int numclienti1=0;
int numclienti2=0;
try{
PrintWriter out=new PrintWriter(new FileWriter("infospo.txt",true));
while(true){
Socket cs=new Socket("127.0.0.1",17001);
ObjectInputStream in=new ObjectInputStream(cs.getInputStream());
temp=(Tagliando)in.readObject();
if(temp!=null) {
if(temp.getType()==0) {
System.out.println("==============\n
Sono lo Sportello: "+name+" Ho servito: \n"
+temp+
"Cliente Numero: " +numclienti1+
"\n==================");
(g.getSg()).setGrafico(name,temp,numclienti1);
out.println("Sportello: "+name+" Tipo1: "+numclienti1);
out.flush();
numclienti1++;
Thread.sleep((int)(Math.random()*3000));
}
else {
System.out.println("==============\n
Sono lo Sportello: "+name+" Ho servito: \n"
+temp+
"Cliente Numero: " +numclienti2+
"\n==================");
(g.getSg()).setGrafico(name,temp,numclienti2);
out.println("Sportello: "+name+" Tipo2: "+numclienti2);
out.flush();
numclienti2++;
Thread.sleep((int)(Math.random()*3000));
}
}
in.close();
cs.close();
}
}catch(UnknownHostException e){
System.out.println("Il server non risponde\n");
e.printStackTrace();
}
catch(IOException e){
System.out.println("Errore lettura\n");
e.printStackTrace();
}
catch(ClassNotFoundException e){
System.out.println("Classe Oggetto non trovata\n");
e.printStackTrace();
}
catch(InterruptedException e){
System.out.println("Errore Interrupted\n");
e.printStackTrace();
}
}
}