Chức năng sau đây được thực hiện trong chủ đề riêng của mình:Luồng trong Java: Làm thế nào để khóa một đối tượng?
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);
}
}
Khi thực hiện đạt các dòng serverAddr.wait(60000)
nó ném một ngoại lệ:
java.lang.IllegalMonitorStateException: object not locked by thread before wait()
Có ai biết làm thế nào để khóa một đối tượng hoặc một hàm trong để ngăn ngừa đồng thời? Tôi đã cố gắng thêm một đối tượng Lock:
private final Lock lock = new ReentrantLock();
và dòng
boolean locked = lock.tryLock();
vào đầu chức năng nhưng nó đã không làm việc.
bạn muốn làm gì? WAIT không có ý nghĩa gì cả ... – ReneS