tjt Posted May 2, 2013 Report Posted May 2, 2013 Am inceput sa ma joc cu firele de executie prin JAVA si am intampinat urmatoarea problema :Am 2 fire de executie (consumator/producator) .In cadrul producatorului pentru fiecare apel al Thread-ului trebuie sa fac o citire de la tastatura . Aici e problema. In momentul in care fac citirea de la tastatura imi iese din Thread-ul producator si se duce direct in consumator pentru ca intervine Thread-ul pentru Input.Cum as putea ca thread-ul Producator si thread-ul din interiorul lui care apare atunci cand fac Input de la tastatura sa lucreze ca un singur Thread ?Metodele put si get sunt sincronizate.//fir de executie pentru producator....public void run() { while(true){ setarePachet(); /* Aici e problema !!! Cand apeleaza metoda asta ,imi iese din thread-ul Producator pentru ca se face citirea de la tastatura */ pipe.put(mesaj); pipe.notificare(true); } }....//Fir de executie pentru Consumator....public void run() { while(true){ mesaj=pipe.get(); pipe.notificare(false); System.out.println("Consumator :<--- "+mesaj); } }.... Quote
M2G Posted May 2, 2013 Report Posted May 2, 2013 La cat cod ai pus aici nu cred ca isi da cineva seama ce vrei sa faci si mai ales cum vrei sa faci. Pune si tu codul complet. Quote
noVaLue Posted May 3, 2013 Report Posted May 3, 2013 (edited) Cum zicea si M2G, ai dat prea putine informatii. Cand lucrezi cu threaduri si functii care se bazeaza pe threaduri ( gen block on wait) totul e bine si frumos, caci threadul principal va fi blocat in asteptare la sfarsirea threadului curent, child (cel care are ca thread parent pe cel blocat, principal). Daca ai fi observat pe langa `synchronize` se poate utiliza `wait()`, cu ajutorul careia se poate implementa acest comportament.La baza un thread nu are nimic de a face cu un alt thread, daca ele sunt scrise in asa fel incat sa nu se opreasca (gen bucla while/for/recursive). Ele vor 'functiona in paralel', pana cand o eroare se va produce in threadul respectiv si se va opri, ori a fost fortat sa se opreasca. Chiar daca un thread se blocheaza celalalt poate continua sa ruleze, atat timp cat programul in sine nu blocheaza toate threadurile pe motiv de eroare mai grava.Noi nu stim cum functioneaza pipe urile tale, si ce comportament vrei ca programul sa abordeze. Edited May 3, 2013 by noVaLue Quote
tjt Posted May 11, 2013 Author Report Posted May 11, 2013 Da aveti dreptate ar fi trebuit sa pun mai mult cod,dar e vorba despre un proiect privat care nu ar trebui sa aiba parti din cod sursa publice.Oricum dupa lungi cautari am inteles exact cum se manifesta thread-urile si am reusit sa rezolv problema cu ajutorului ThreadGroup.Un moderator poate sa inchida topicul. Quote