gpt4 book ai didi

java - 为返回值的函数实现多线程时的难题

转载 作者:行者123 更新时间:2023-11-30 09:29:28 25 4
gpt4 key购买 nike

TokenCache 类被传递给 Facebook 类以执行 save()load() token 。 TokenCache 具有以下功能:

public abstract void save(Bundle bundle);
public abstract Bundle load();

现在我想在多个线程中进行保存和加载,所以我在 load() 中运行了一个 AsyncTask。问题是它已经被设计成返回一个 Bundle!如何实现它以便仅在 AsyncTask 完成时才返回值?

最佳答案

只需在您的 TokenCache 实现中有一个 Bundle 字段,您的 load() 方法将返回该字段。只要确保在 Bundle 被某些 init(bundle) 方法初始化之前,您还没有将对 TokenCache 的引用传递给 FB,例如

  static class BundleRetrievalTask extends AsyncTask<String, Void, Bundle> {

@Override
protected Bundle doInBackground(String... strings) {
return someLongOperationThatFetchesBundle(strings[0]);
}

@Override
protected void onPostExecute(Bundle bundle) {
super.onPostExecute(bundle);
MyFacebookTokenCache tokenCache = MyFacebookTokenCache.init(bundle);
doSomethingWithCache(tokenCache);

}
}

static class MyFacebookTokenCache extends TokenCache {

private Bundle mBundle;

public MyFacebookTokenCache(Bundle bundle) {
mBundle = bundle;
}

public static MyFacebookTokenCache init(Bundle bundle) {
return new MyFacebookTokenCache(bundle);
}

@Override
public Bundle load() {
return mBundle;
}

@Override
public void save(Bundle bundle) {
//todo
}

@Override
public void clear() {
//todo
}
}

关于java - 为返回值的函数实现多线程时的难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13638514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com