- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试同步 Android 应用程序的两个代码块。
第一个 block 使用 AsyncFacebookRunner 来请求用户的兴趣(如果有)。
如果找到兴趣,则该用户的成员变量将使用来自 Facebook JSON 响应的兴趣进行填充。
第二个代码块通过查看该成员变量来检查用户是否确实感兴趣。如果有兴趣,则会执行几行额外的代码。
synchronized(this)
{
if ( (friend.getmActivities().length() == 0) && (friend.getmInterests().length() == 0) )
friend.requestInterests(mFacebook); // Get that friend's Facebook activities and interests.
}
synchronized(this)
{
if ( (friend.getmActivities().length() == 0) && (friend.getmInterests().length() == 0) )
{
final AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setTitle("Sorry...");
alertDialog.setMessage("Your friend isn't sharing their interests.");
alertDialog.setButton("Go Back", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
alertDialog.show();
}
}
我希望第二个 block 等到friend.requestInterests()完成后再执行。
编辑:我最终重组了我的代码以利用运行程序的 onComplete 方法。当我修改程序的结构并且必须更改所有内容时,这一切都发生了。感谢大家的帮助。
最佳答案
I want the second block to wait until friend.requestInterests() is complete before executing.
JVM 确保对于 this 的同一个实例,两个 block 不会同时执行。
如果您另外想要确保第二个 block 仅在第一个 block 运行之后运行,那么您可以使用状态变量和 wait
/notify
调用。但更好的方法是使用同步类之一,例如 CountDownLatch
;例如
private CountDownLatch latch = new CountDownLatch(1);
...
synchronized(this) {
// do first actions
}
this.latch.countdown();
....
this.latch.await();
synchronized(this) {
// do second
}
事实上,如果这些是访问和更新相关对象状态的唯一位置,那么您应该能够省略 synchronized
block 。对 countdown
和 await
的调用将提供必要的“先于”关系,以确保正确的同步。
但是,@pst 的评论提出了这样一个观点:使用您的代码所使用的 Facebook 库框架的 API 可能有更好的方法来实现此目的。
关于java - 误用同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051768/
在考虑如何将 tkinter Frame 和 LabelFrame 子类化以便它们位于正确的父级上时,我发现很多答案表明 super() .__init__ 在子类化时优于 BaseClass.__i
我正在编写一些实用程序,我想将它们作为函数调用。它们是通过往往不会改变的上下文和一些数据来调用的。需要对上下文进行大量耗时的处理,但是一旦完成,用它来暴露数据就相当轻量了。 这显然可以很好地映射到以下
嗨,我正在尝试找到 - 字符,然后将最左边的字符放入字符串中。在这里,我希望 FUPOPER 存储在 program_id_DB 中,但是当我运行此代码时,我的输出结果为: Character '-'
我正在尝试使用 SQL 和 PHP 创建一个登录系统。我有一个包含三个字段的标准数据库:用户名、密码和授权级别。由于某种原因,当我测试代码时,即使我使用正确的访问级别和正确的凭据,登录也会失败。在我将
我对 if 和 else 语句有疑问。 我写了下面的脚本: def questionscp(): stateanswer = raw_input('Do you want to change
我正在编写一个程序来从文件中读取数据,该文件可能采用多种格式之一(实际上是同一格式的不同版本),并且我正在使用反射为每种格式调用适当的函数。假设文件格式是在文件的第一个字节指定的数字: Class D
我花了一整天时间阅读 Fielding's famous dissertation on REST .它在 Conclusion 上说部分: REST, a novel architectural s
我正在做一些非常简单的事情,只是为了习惯 Swift(来自 objc)——我想通过使用 guard 返回链表中的所需节点。声明和 switch陈述。我显然滥用了 guard声明因为我的else子句很大
我使用的是 Visual Studio 2008 并编译了以下代码。 代码1: int* pI = new int[3]; delete pI; 代码2: int* pJ = new int[3];
我是一名优秀的程序员,十分优秀!