小编elj*_*nso的帖子

避免在Java中同步(this)?

每当有关Java同步的问题出现时,有些人非常渴望指出synchronized(this)应该避免的.相反,他们声称,首选锁定私人参考.

一些给出的原因是:

其他人,包括我在内,认为这synchronized(this)是一个被大量使用的习惯用法(也在Java库中),是安全且易于理解的.它不应该被避免,因为你有一个错误,你不知道多线程程序中发生了什么.换句话说:如果适用,则使用它.

我有兴趣看到一些现实世界的例子(没有foobar的东西)避免锁定this是最好的,当synchronized(this)也做的工作.

因此:您是否应始终避免synchronized(this)并使用私有引用上的锁来替换它?


一些进一步的信息(更新为答案):

  • 我们正在谈论实例同步
  • 考虑隐式(synchronized方法)和显式形式synchronized(this)
  • 如果您引用Bloch或其他有关该主题的权限,请不要遗漏您不喜欢的部分(例如,有效Java,线程安全项目:通常它是实例本身的锁,但也有例外.)
  • 如果你需要锁定的粒度而不是synchronized(this)提供,那么synchronized(this)不适用,所以这不是问题

java multithreading synchronization synchronized

369
推荐指数
9
解决办法
14万
查看次数

所有迭代算法都可以递归表达吗?

如果没有,是否有一个好的计数器示例显示迭代算法,其中不存在递归对应物?

如果所有迭代算法都可以递归表达,那么在哪些情况下更难以做到这一点?

此外,编程语言在这一切中扮演什么角色?我可以想象,Scheme程序员对Java迭代(=尾递归)和堆栈使用的看法与Java专用程序员不同.

iteration recursion programming-languages language-theory

44
推荐指数
4
解决办法
2万
查看次数

一般来说,C#中的每个抽象函数都是虚拟的吗?

我在看Stack Overflow问题抽象函数和虚函数有什么区别?,我想知道每个抽象函数是否应该被认为是C#中的虚函数或者一般?

我对"你必须覆盖/你可以覆盖"对这个问题的回答感到有些困惑.不是C#程序员,我倾向于认为抽象函数只是一个编译时的概念,抽象函数是定义的虚函数,因为你必须提供至少一个,但可以在层次结构的下面提供多个实现.

虚函数也具有编译时维度,因为您不能覆盖非虚函数,但它们主要是运行时概念,因为它"只是"选择基于实际接收器的正确方法实现.

c# oop

22
推荐指数
1
解决办法
6243
查看次数

如何加速Android Emulation?

我正在尝试开始Android开发.

我在Linux上使用eclipse并使用Pentium IV @ 3.2Gh和1GB内存.我只是跟着"hello android"howto,只有一个令人遗憾的结果:虚拟化太慢了.

似乎启动虚拟机必须很慢,即使我使用更好的计算机也会很慢.

我的意思是说我需要差不多10分钟才能看到"hello android",如果我把它改成"你好世界",还需要10分钟......

我该如何解决?是否有可能使eclipse在当前正在运行的虚拟机中再次加载我的应用程序而无需打开新的虚拟机?

performance android android-emulator

21
推荐指数
4
解决办法
3万
查看次数

HashSet的迭代顺序

如果每个对象添加到java.util.HashSet中以确定性的方式实现的Object.Equals()和是Object.hashCode(),是迭代顺序在HashSet的保证用于每加入相同组元素是相同的,而不管的他们被添加的顺序?

奖金问题:如果插入顺序相同怎么办?

(假设Sun JDK6具有相同的HashSet初始化.)

编辑:我原来的问题不明确.它不是关于HashSet的一般契约,而是Sun在JDK6中对HashSet的实现提供了关于确定性的保证.它本质上是非确定性的吗?什么影响其迭代器使用的顺序?

java algorithm collections hashset

18
推荐指数
4
解决办法
2万
查看次数

你怎么能在Scheme中重写"开始"?

正如维基百科文章所解释的那样,begin在Scheme中是一个可以使用更基本的形式重写的库形式lambda.

但是你如何改写a begin,特别是考虑以下情况?

x
===> error: undefined identifier: x
(begin (define x 28) x)
===> 28
x
===> 28
Run Code Online (Sandbox Code Playgroud)

scheme

12
推荐指数
1
解决办法
4155
查看次数

CPS转换后的管理重新索引究竟是什么?

在Scheme和CPS转换的上下文中,我在确定哪些管理重新索引(lambdas)确实存在时遇到了一些麻烦:

  • CPS转换引入的所有 lambda表达式
  • 只有 CPS转换引入的lambda表达式,但如果您"手动"或通过更智能的CPS转换器进行转换,则不会写入

如果可能的话,欢迎提供良好的参考.

scheme continuations language-theory continuation-passing

9
推荐指数
1
解决办法
574
查看次数

不同的WAR文件,共享资源

假设你有几个应用程序共享相同的代码和大多数其他资源,但有一些不同的外观和感觉,一些标签更改等等(想想品牌).如果每个Web应用程序都要使用自己的WAR文件,那么您将在何处放置共享资源?

我已经使用类路径来共享类和属性文件.但是javascript和css文件怎么样?是创建和部署一个额外WAR文件的最佳方法,该文件将为这些共享文件提供其他应用程序所需的文件吗?

我还想到了一个构建脚本,它做了一些魔术,并从一个共同的源码喷出(略微)不同的WAR,但我不喜欢它,因为它只是在你需要构建/测试/运行单个应用程序时不必要的复杂化.

任何其他提示和技巧将不胜感激.

javascript css java deployment

8
推荐指数
2
解决办法
5376
查看次数

用于Java中的实例方法同步的等效代码

在讨论Java同步问题时,有人评论说下面的代码片段不相同(并且可能编译为不同的字节码):

public synchronized void someMethod() {
  //stuff
}
Run Code Online (Sandbox Code Playgroud)

public void someMethod() {
  synchronized (this) {
    //stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

它们是等价的吗?

java synchronization

8
推荐指数
2
解决办法
2527
查看次数

在Java中,让对象的成员公开可用是不是一个坏主意?

我的应用程序中有一个数据类.我的应用程序永远不会被用作公共API,我将是唯一一个在我的项目中开发代码的人.

我试图保存每一盎司的处理器和内存电源.

在我的数据类中使我的数据成员具有公共/受保护/默认保护是不是一个坏主意,这样我就不必使用getter了?使用getter需要更多的内存和堆栈的创建......我相信这是不必要的.我在使用getter时可以看到的唯一原因是保护/隐私,但如果我是唯一的编码器而没有其他人会使用我的API,那么不使用getter是一个坏主意吗?

如果这是愚蠢的,请告诉我.

java encapsulation field private public

7
推荐指数
4
解决办法
1110
查看次数