Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: [java] multi thread

  1. #1

    [java] multi thread

    salve....

    ho letto qualcosa sul multithread in java e si parla di sincronizzazione e monitor.

    mi è sembrato di capire che è possibile indicare un metodo come sincronized e tutti i trhead fanno a turno per accedere a questo metodo.
    Ho capito bene???

    In teoria quindi potrei creare un metodo sincronizzato di accesso ad un db che realizza un monitor object e tutti i trhead si "organizzano" per usufruirne???


  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Se una classe A_ ha dei metodi sincronizzati ed a_ è un istanza di A_, ad ogni istante ci puo essere al più un thread che sta eseguendo un metodo sincronizzato invocato sull'oggetto a_. Tutti gli altri thread che vogliono eseguire un metodo sincronizzato saranno sospesi.

    Se la classe A ha dei metodi statici sincronizzati, è possibile l'esecuzione simultanea di due thread, uno che seegue un metodo statico sincronizzato, e uno che esegue un metodo non statico; ovvero metodi statici e metodi non statici non si escludono a vicenda. Questo perche un metdono non statico blocca l'oggetto su cui sta eseguendo il metodo sincronizzato, mentre il metodo statico blocca la clase. Ovviamente, altri thread possono in ogni caso eseguire metodi non sincronizzati.

    Quindi per realizzare l'accesso sincronizzato puoi creare un metodo statico sincronizzato oppure un metodo non statico, e per avere l'accesso esclusivo, i vari thread devono invocare tale metodo non statico sincronizzato sullo stessa istanza della classe.


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Vediamo se ho capito:
    creo una classe A che estende la classe Trhead.
    Questa classe avrà un riferimento ad un'altra classe B che utilizza un metodo sincronizzato per l'accesso ad un db.
    Le due classi sono legate in modo che ogni istanza della classe A richiami il metodo sincronizzato di B per l'accesso al db.

    Ogni istanza della classe A, quindi ogni trhead creato, richiama nell'istante stesso della sua nascita il metodo di B sincronizzato per accedere al db.

    Ciò permetterà accesso esclusivo verso il db gestendo i trhead uno alla volta. Sarà compito del metodo sincronizzato di B, far sapere che la risorsa è libera.
    Esatto????
    Il turno dei trhead deve essere esplicitamente definito oppure chi arriva prima si serve???

    grazie



  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Si, è come hai capito; per quanto riguarda l'ordine dipende se per te è importante oppure no; solo con synchronizrd non riesci a garantire l'ordine nel senso che un ordine non lo definisci neanche; se vuoi unaccesso ordinato ti servono i metodi wait(), notifyAll(), ma dovresti esserti tu a gestirti l'ordine...

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    no l'ordine non è importante. mi basta il contetto "chi arriva prima si serve, ma senza che altri vogliano servirsi mentre la risorsa è occupata".

    senza l'utilizzo dei metodi che tu dici, posso quindi stare tranquillo che i thread utilizzino un minimo di "educazione"???
    nel senso....incorro in accessi contemporanei che possono ledere alla veridicità dei dati???


  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Puoi stare sicuro; se un thread ha bloccato un oggetto, ogni altro thread che vogli eseguire un metodo sincronizzato su quell'oggetto si sospenderà; una volta che l'oggetto è sbloccato, uno tra i vari thread in attesa potrà invocare il suo metodo sincornizato sull'oggetto bloccandolo a sua volta, e cosi via. Java permette una programmazione multithreading molto semplice perchè il multithreading è "cablato" nel linguaggio stesso, come dimostra la stessa parola chiave synchronized.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    Grazie tante per l'attenzione che hai prestato alle mie domande
    Ancora grazie


  8. #8
    ho utlizzato il metodo sincronizzato, ma i trhead si danno ilcambio per effettuare le oro operazioni.

    Ogni thread esegue una transazione composta sa varie select e un insert. la transazione è a livello serializable.

    In soldoni: il trhead uno esegue la prima select, il secondo pure, poi il primo therad esegue la seconda select ed il secondo trhead pure.
    perchè????
    io voglio che l'intera transazione del primo thread venga eseguita completamente e soltanto quando questa ha finito, venga il turno del secondo thread


  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    ma le due select vengono eseguite all'interno di un metodo sincronizzato? Cioè tale metodo non deve contenere una select, e poi un altro meto do l'altra select; entrambe le select devono stare all'interno dello stesso metodo. E tale metodo deve essere invocato sullo stesso oggetto.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  10. #10
    Ho la classe server. Questa rimane in ascolto sulla porta.
    Questa classe, quando giunge una richiesta dal client, crea un oggetto serverThread e gli passa un riferimento al socket che viene creato dalla richiesta stessa.
    L'oggetto serverThread estende Thread.
    Esso crea un oggetto treeSQL. Questa classe contiene il metodo sincronizzato e all'interno di questo utimo viene creato e richiamato il metodo dell'oggetto che si occupa della transazione.

    C'è un errore di concetto????



Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.