Scusa se mi permetto di dirlo .... che tu l'abbia risolto ok. Che l'abbia risolto bene non ci metterei la mano sul fuoco ....Originariamente inviato da Giandella
anche qui problema risolto
Già solo le eccezioni non sono state gestite come si deve. Ad un certo punto catturi le eccezioni e fai un e.printStackTrace(); ma poi continui tranquillamente come se nulla fosse.
Tutta quella gestione dei "semafori" complica solo la vita. Avevo anche descritto una soluzione alternativa: ogni thread si tiene una variabile di istanza con il "suo" checksum. Alla fine si attende la terminazione di tutti i thread e quindi si leggono i checksum parziali e si sommano. Nessuna concorrenza, niente lock, semafori o roba del genere.
Poi c'è anche la questione dei buffer. Usi N thread ed è ok. Ma usi anche N buffer tali per cui l'insieme dei buffer è comunque la dimensione totale del file. Cioè se fai il checksum di un file di 100 MB, allochi comunque 100 MB in tutto!!
Insomma .... sarebbe ampiamente migliorabile.