快捷导航

接口在线程中的安全性问题如何解决?

//这段代码存在bug,子线程还没结束,主线程就调用了方法,后面的子线程忽然被设置了100,主线程不会再次调用,出现了意想不到的结果//怎样才能保证接口在子线程的异步加载,既不去阻塞主线程,又保证子线程的数据能及时更新到主线程里//总体来说这个代码的bug就是,这个子线程执行完毕了,主线程的方法却没被再次调用publicclassMain2{staticStringstr="";//外部内存的stringpublicstaticvoidmain(String[]args){Infoinfo=newInfo();threadzz=newthreadz(info);newThread(z).start();//while(Thread.activeCount()>1){//Thread.yield();//如果子线程没结束完,就让主线程终止,这种写法,等于把子线程放在主线程中,无法提高效率,主线程也进入未响应状态;//}info.getStr(newResult2(){@OverridepublicvoidSucces(Strings){str=info.num+"--"+s;}@OverridepublicvoidFail(){str=info.num+"--失败";}});System.out.println("响应码"+str);}}classthreadzimplementsRunnable{Infoinfo;publicthreadz(Infoinfo){super();this.info=info;}@Overridepublicvoidrun(){//如果对这个线程进行加锁,那么主线程执行了方法,加锁后这个num默认值是0,也不是想要的结果//synchronized(info){//try{//info.wait();//}catch(InterruptedExceptione1){////TODOAuto-generatedcatchblock//e1.printStackTrace();//}info.num=200;try{Thread.sleep(2000);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}info.num=100;//info.notifyAll();//}}}interfaceResult2{voidSucces(Strings);voidFail();}classInfo{Result2result;intnum;voidgetStr(Result2r){this.result=r;if(num==200){r.Succes("成功");}else{r.Fail();}}}打印的是:响应码200--成功等待一段时间后,子线程真正的结束,但是主线程运行的结果不是想要的结果

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

....
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP