problem z synchronizacja

0

hej, mam aplikacje na telefon i nastepujacy problem:
mam watek, a w nim 2 timer'y-oba maja slac dane na serwer. pierwszy co 5sekund, drugi co sekunde. problemem jest to, ze po uruchomieniu aplikacji po paru sek zostaje rozlaczona (IOException). mysle ze prawdopodobnie przez to ze w jakims momencie oba timery probuja poslac dane w tej samej chwili. oto moj kod:

//in my thread, run method:

public void run(){

 synchronized(_firstTimer){
 
//send data every 5 sec
_firstTimer.scheduleAtFixedRate(new TimerTask(){

 public void run(){
   sendData(_data1);
}
},0, 5000);
}

  
while(true){

  synchronized(_secondTimer){

//send data every second
  _secondTimer.scheduleAtFixedRate(newTimerTask(){

        public void run(){
          
     sendData(_data2);
}

}, 0, 1000);
}

}//end of while


}//end of run()

//and sendData() method:

	 public boolean sendData(byte[] _b){
			int length = _b.length;

			try{ 
				_os.write(_b, 0, length);
				_os.flush();
				
				return true;
			} catch(Exception e){ 	return false;	}
			
		}//end of sendData method


//where before in the code i've got:
SocketConnection _s = (SocketConnection)Connector.open(_address);
_os = _s.openDataOutputStream();

czy ktos z Was ma moze jakies sugestie?

probowalam ustawiac flage w metodzie sendData:

 public boolean sendData(byte[] _b){
//ustaw flage ze dane sa slane
singleton.daneSlane();
			int length = _b.length;

			try{ 
				_os.write(_b, 0, length);
				_os.flush();
				
//dane nie sa juz slane
singleton.daneNieslane();
				return true;
			} catch(Exception e){ 	
daneNieslane();
return false;	}
			
		}//end of sendData method

i pozniej na podstawie tej flagi obslugiwac pierwszy timer:

synchronized(_firstTimer){
 
//send data every 5 sec 
_firstTimer.scheduleAtFixedRate(new TimerTask(){

 public void run(){

//slij dane jest flaga nie jest ustawiona na tryb slania
if(singleton.czyDaneSlane() == false ){
   sendData(_data1);
}
}
},0, 5000);
}

ale i to nie pomaga..
bede wdzieczna za wszelkie wskazowki,
pzdr,
misty

0

wyglada na to ze moj glupi i dosc banalny blad-drugi timer (tzn slanie danych w drugim timerze) rowniez powinno byc uzaleznione od flagi. wyglada na to, ze teraz dziala poprawnie.

niemniej-osobiscie czesto mam problemy z watkami, tzn z ich synchronizacja. za kazdym razem jak probuje zanalezc jakis porzadny artykul na ten temat w google, to jest on ograniczony do przykladu:

synchronized(thread){
}

czy ktos z Was zna moze jakis tutorial/ma jakis ciekawy adresik pod ktorym moglabym znalezc jakis porzadny artykul i bardziej zaawansowane przyklady?

pzdr,
misty

0

W Thinking in Java jest sporo o wielowątkowości (Eckel udostępnia tą książkę za darmo na swojej stronie). Oprócz tego polecam też dobrą książkę "Współbieżność dla praktyków".

0

@misty, ostatnio lubię szkielet Executor. Rzuć oczętami do API.

0

dzieki za sugestie!

pzdr,
misty

1 użytkowników online, w tym zalogowanych: 0, gości: 1