la siguiente función se ejecuta en su propio hilo:Enhebrado en Java: cómo bloquear un objeto?
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);
}
}
Cuando la ejecución alcanza la línea serverAddr.wait(60000)
lanza una excepción:
java.lang.IllegalMonitorStateException: object not locked by thread before wait()
¿Alguien sabe cómo bloquear un objeto o una función en Para evitar la concurrencia? He intentado añadir un objeto de bloqueo:
private final Lock lock = new ReentrantLock();
y la línea
boolean locked = lock.tryLock();
al comienzo de la función, pero no funcionó.
¿Qué quieres hacer? El WAIT no tiene ningún sentido ... – ReneS