当前位置: 首页 > 知识库问答 >
问题:

通过最终方法参数安全发布?

李烨烁
2023-03-14
private void collectResults() {
    runOnBackgroundThread(new Runnable() {
        public void run() {
            displayResults(someBlockingMethodCall());
        }
    });
}

private void displayResults(final List<Foo> results) {
    runOnUiThread(new Runnable() {
        public void run() {
            someUiMethodCall(results);
        }
    });
}

每个方法将一个runnable排入队列,以便在另一个线程上执行。在后台线程上调用SomeBlockingMethodCall()来执行某些任务,在UI线程上调用SomeImethodCall()来显示结果。

如果我们假设SomeBlockingMethodCall()返回一个可变的、未同步的列表,例如ArrayList,那么赋值给DisplayResults()的最后一个参数是否可以确保列表的安全发布,还是需要采取额外的步骤来确保安全发布?

共有1个答案

南宫鸿晖
2023-03-14

你在这里其实很好。如果您将results写入一个未同步的共享变量,那么您唯一需要担心的就是。

要将它移交给线程,通常应该有一些同步。例如,如果您启动了一个线程,并且results被传递给了Runnable,那么线程的start就是您需要的同步点。

在本例中,您调用的是runonuithread,从您提交results到线程拾取它的时刻有一个同步点。

 类似资料:
  • 问题内容: 即使经过了这一点,我仍然不清楚在以下代码中使用final如何导致安全发布。有人可以给出一个易于理解的解释吗? 问题答案: 编辑添加:关于Java和JSR-133 行为起源的 有趣观点。 有关如何在新JMM中正常工作的规范参考,以确保安全发布:http : //www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#finalRigh

  • 问题内容: 下面的代码之间有什么区别?将参数声明为是有什么好处? 问题答案: 由于形式方法的参数是局部变量,因此只有在内部匿名类被声明为final的情况下,您才能从内部匿名类访问它们。 这使您不必在方法主体中声明另一个局部最终变量:

  • 问题内容: Java-通过POST方法发送HTTP参数? 问题答案: 在GET请求中,参数作为URL的一部分发送。 在POST请求中,将参数作为请求的正文发送到标头之后。 要使用进行POST,你需要在打开连接后将参数写入连接。 这段代码可以帮助你入门:

  • 问题内容: 我成功使用此代码通过方法发送 带有某些参数的请求 现在,我可能需要通过POST方法发送参数(即param1,param2,param3),因为它们很长。我在想为该方法添加一个额外的参数(即String httpMethod)。 我如何才能尽可能少地更改上面的代码,以便能够通过GET或发送参数POST? 我希望改变 至 本来可以解决问题的,但是参数仍然通过GET方法发送。 有没有什么方法

  • 是否有可能找出方法的参数是否是的?我试过这个: 但是,即使第一个参数有< code>final修饰符,< code>modifiers也被设置为零。 编辑:我真的不认为我的问题是重复的。当我使用类成员(例如字段、方法等)尝试此代码时,它可以完美地工作。但是使用方法参数失败! edit2:在你建议我的问题中,我没有找到答案,所以你能帮助我,如何检查参数是否是最终的?

  • 所以我对Java和Android的开发都很陌生,但我通过谷歌登录我的应用程序时,不知怎的成功地获得了一个idToken。 我在Android dev网站上读到,仅仅是ID是不安全的,因为修改过的客户端可能会发送一个假的ID并导致对另一个用户的冒充,所以我按照他们的步骤获取了用户的idToken。 不管怎么说,把一个URL发送到我家里的服务器上安全吗?例如,像这样(假设随机文本的长字符串是用户的id