我的课程使用第三方库类来完成一项工作。一般来说,我初始化第三方库类,这反过来又触发回调方法:由于某种原因,线程变量被隐式设置为空
public class MyJob {
private Thread myThread;
private ThirdPartyService mThirdParty;
public MyJob() {…}
public void start() {
//get an instance of 3rd party class
mThirdParty = ThirdParty.getInstance();
//create an instance of 3rd party callback
ThirdPartyCallBack callback = new ThirdPartyCallBack() {
@Override
public void onInitSuccess() {
if (null == myThread) {
myThread = new Thread();
System.out.println(“myThread is created in callback!”);
//do tasks…
}
}
};
System.out.println(“mThirdParty.init() …”);
mThirdParty.init(callback);
//myThread is null here when call start() the 2nd time, why?
if (myThread == null) {
System.out.println(“After mThirdParty.init(), myThread is NULL!”);
} else {
System.out.println(“After mThirdParty.init(), myThread is NOT NULL!”);
}
}
public void stop() {
myThread.join();
myThread = null;
System.out.println(“stopped!”);
}
}
正如你看到的上面的mThirdParty.init(callback)
触发onInitSuccess()
执行的回调方法。
代码使用MyJob类:
MyJob job = new MyJob();
job.start();
Thread.sleep(5000);
job.stop();
Thread.sleep(5000);
job.start();
我第一次开始工作,每一件事情是在这里很好,控制台打印以下日志:
mThirdParty.init() …
myThread is created in callback!
After mThirdParty.init(), myThread is NOT NULL!
5秒钟后,我打电话停止(),日志显示:
stopped!
后5秒,再次启动工作,日志显示:
mThirdParty.init() …
myThread is created in callback!
After mThirdParty.init(), myThread is NULL!
为什么在我第二次启动工作之后,我的myThread是NULL?难道第三方库已经以某种方式隐式地将其设置为null?
你如何看待第三方库的源代码? –
这是真实的代码吗?因为'myThread = new Thread();'是无用的。还是你在项目中创建了一个名为Thread的类? –
它不是真正的代码,我只是试图展示我的代码的一般逻辑 – user842225