我有一个同步方法。那么我将用长时间操作启动一个Thread,子线程也有一个同步方法,但是在子线程中的synchronized方法将保持synchronized方法的锁定,这将导致anr在我的应用中。为什么在子线程中同步方法保持主线程锁定
我的代码是:
import java.util.Date;
public class ThreadTest {
static MQTTThread mThread;
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println("the " + i + " - restart time = "
+ new Date());
restart(i);
}
}
private static synchronized void restart(int i) {
System.out.println("the " + i + " - restart excute " + new Date());
if (null != mThread) {
if (!mThread.isAlive()) {
try {
System.out
.println("Action:restartConnectThread in mThread.runFlag)");
mThread = new MQTTThread();
mThread.setName("MQTTThread");
mThread.start();
// mqttExecutor.execute(mThread);
} catch (Exception e) {
System.out.println("!mThread.runFlag");
}
} else {
System.out.println("Action:restartConnectThread - CONNECTING");
}
} else {
try {
System.out
.println("Action:restartConnectThread in null thread");
mThread = new MQTTThread();
mThread.setName("MQTTThread");
mThread.start();
} catch (Exception e) {
System.out.println("null mThread");
}
}
}
private static class MQTTThread extends Thread {
public void run() {
connectToServer();
System.out.println("connected");
}
}
public static synchronized void connectToServer() {
try {
System.out.println("Thread.sleep " + new Date());
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行代码的结果是: – user3766493
把它放在你的问题。不在评论中。 – awksp
你可以在你打电话的地方写出原始的android代码吗? – carlosvin