Autore Topic: AsyncTask concorrenti  (Letto 182 volte)

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
AsyncTask concorrenti
« il: 06 Settembre 2010, 11:25:44 CEST »
0
come è possibile sincronizzare degli AsyncTask che utilizzano in maniera concorrenziale  la stessa risorsa, clientHttp
credo che il problema sia questo perchè il logcat mi segnala questo problema


09-06 11:19:49.840: WARN/System.err(23421):     at org.json.JSONObject.get(JSONObject.java:354)
09-06 11:19:49.840: WARN/System.err(23421):     at org.json.JSONObject.getString(JSONObject.java:510)
09-06 11:19:49.840: WARN/System.err(23421):     at org.liquidjournal.MySubscription$Task.doInBackground(MySubscription.java:110)
09-06 11:19:49.840: WARN/System.err(23421):     at org.liquidjournal.MySubscription$Task.doInBackground(MySubscription.java:1)
09-06 11:19:49.840: WARN/System.err(23421):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-06 11:19:49.840: WARN/System.err(23421):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-06 11:19:49.840: WARN/System.err(23421):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-06 11:19:49.840: WARN/System.err(23421):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-06 11:19:49.850: WARN/System.err(23421):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-06 11:19:49.850: WARN/System.err(23421):     at java.lang.Thread.run(Thread.java:1102)

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:AsyncTask concorrenti
« Risposta #1 il: 06 Settembre 2010, 11:27:42 CEST »
0
potrei inserire uno spinlock  all interno del mio client http ma credo ci sia soluzione migliore, penso siano deprecati al giorno d'oggi gli spinlock :P :)

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:AsyncTask concorrenti
« Risposta #2 il: 06 Settembre 2010, 11:35:20 CEST »
0
Non sono molto esperto di concorrenza, ma potresti provare all'interno di ciascun asynctask:

Codice (Java): [Seleziona]
synchronized (oggettoDiCuiFareIlLock){
//Usi l'oggetto di cui sopra
}

Comunque, sicuro si tratti di un errore di questo tipo? Da quello che hai postato non si capisce.

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:AsyncTask concorrenti
« Risposta #3 il: 06 Settembre 2010, 11:36:04 CEST »
0
nel senso volevo creare una variabile statica boolean nel client Http
un thread va a controllare se la risorsa è disponibile se si entra  setta la variabile a false e fa quello che deve fare e poi la rilascia  (setta a true la variabile)quando ha finito , se la risorsa non è disponibile entra in un ciclo infinito controllando ad ogni giro se la variabile è a true, dovrebbe funzionare ma mi sembra dispendioso in termini di prestazioni

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:AsyncTask concorrenti
« Risposta #4 il: 06 Settembre 2010, 11:37:48 CEST »
0
Non sono molto esperto di concorrenza, ma potresti provare all'interno di ciascun asynctask:

Codice (Java): [Seleziona]
synchronized (oggettoDiCuiFareIlLock){
//Usi l'oggetto di cui sopra
}

Comunque, sicuro si tratti di un errore di questo tipo? Da quello che hai postato non si capisce.
non riesco a capirlo, quello che mi ha fatto pensare alla concorrenza è questo
09-06 11:19:49.840: WARN/System.err(23421):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-06 11:19:49.840: WARN/System.err(23421):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-06 11:19:49.840: WARN/System.err(23421):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-06 11:19:49.850: WARN/System.err(23421):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)

ma probabilmente è solo  il nome del pacchetto che gestisce i thread

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:AsyncTask concorrenti
« Risposta #5 il: 06 Settembre 2010, 11:38:46 CEST »
0
Manca il nome dell'eccezione che è stata sollevata....

Comunque, non scrivere doppi post, usa il tasto modifica :)

Offline zerocool87

  • Utente junior
  • **
  • Post: 125
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Htc Legend
  • Sistema operativo:
    Ubuntu 10.04
Re:AsyncTask concorrenti
« Risposta #6 il: 09 Settembre 2010, 00:36:59 CEST »
0
nel senso volevo creare una variabile statica boolean nel client Http
un thread va a controllare se la risorsa è disponibile se si entra  setta la variabile a false e fa quello che deve fare e poi la rilascia  (setta a true la variabile)quando ha finito , se la risorsa non è disponibile entra in un ciclo infinito controllando ad ogni giro se la variabile è a true, dovrebbe funzionare ma mi sembra dispendioso in termini di prestazioni

così useresti una specie di metodo della bandiera. chi entra per primo alza la bandiera (mette la varibile a true) e quando finisce la abbassa (mettendo a false), ma in questo modo non si riesce a gestire correttamente la concorrenza. Devi usare i Monitor che java ti mette a disposizione con il metodo Synchronized.

Definisci Synchronized il metodo concorrente e java fa tutto :)

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:AsyncTask concorrenti
« Risposta #7 il: 09 Settembre 2010, 09:44:07 CEST »
0
Manca il nome dell'eccezione che è stata sollevata....
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:AsyncTask concorrenti
« Risposta #8 il: 09 Settembre 2010, 10:14:16 CEST »
0
ops, avevo dimenticato questo post :)
Codice: [Seleziona]
at java.util.concurrentmi aveva tratto in inganno, non si trattava di un problema di concorrenza, quella era solo una libreria standard di java che gestisce i task,
niente era un semplice problema di Json , quella libreria era stata chiamata di conseguenza, credo che http client gestisca autonomamente la concorrenza :)
Grazie lo stesso , topic risolto

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:AsyncTask concorrenti
« Risposta #9 il: 09 Settembre 2010, 10:19:04 CEST »
0
ops, avevo dimenticato questo post :)

Felice che hai risolto, ma per la prossima volta sappi che ancora non hai specificato l'eccezione che ti ha dato, che è proprio la parolina che sta prima di "at java.util.concurrent"!  :-P
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:AsyncTask concorrenti
« Risposta #10 il: 09 Settembre 2010, 10:33:40 CEST »
0
sisi me ne sono accorto è che nei log l'eccezione era lanciata come warning e non come error e non ci ho fatto caso :)

Grazie a tutti