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(); } } }

Rispondi quotando