De thread en Java: Comment verrouiller un objet?

La Fonction suivante est en cours d'exécution dans son propre thread:

private void doSendData()
{
    try {

           //writeToFile(); //just a temporary location of a call
           InetAddress serverAddr = InetAddress.getByName(serverAddress);
           serverAddr.wait(60000);
           //Log.d("TCP", "C: Connecting...");
           Socket socket = new Socket(serverAddr, portNumber);
           socket.setSoTimeout(3000);

               try {
                //Log.d("TCP", "C: Sending: '" + message + "'");
                PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
                String message = packData();
                out.println(message);
                Log.d("TCP", "C: Sent.");
                Log.d("TCP", "C: Done.");
                connectionAvailable = true;

             } catch(Exception e) {
                 Log.e("TCP", "S: Error", e);
                 connectionAvailable = false;

               } finally {
                  socket.close();
                  announceNetworkAvailability(connectionAvailable);
                }

         } catch (Exception e) {
              Log.e("TCP", "C: Error", e);
              announceNetworkAvailability(connectionAvailable);
         }
}

Lors de l'exécution atteint la ligne serverAddr.wait(60000) il déclenche une Exception:

java.lang.IllegalMonitorStateException: object not locked by thread before wait()

Personne ne sait comment verrouiller un objet ou une fonction afin d'éviter la simultanéité?
J'ai essayé d'ajouter un Verrou de l'objet:

private final Lock lock = new ReentrantLock();

et la ligne

boolean locked = lock.tryLock();

au début de la fonction, mais ça ne fonctionne pas.

  • Que voulez-vous faire? L'ATTENTE n'a aucun sens...
InformationsquelleAutor Niko Gamulin | 2009-03-19