小编inq*_*One的帖子

是否有必要使这个变量变得易变?

我正在阅读关于"Modern Java Concurrency"的"JAX London 2011" 演讲.在持续时间43:20 - 43:40之间,观众中的一个人说shutdown下面代码中的变量应该被声明为volatile并且演示者同意它(并且说它之前也被指出过,但它们只是没有得到修改演示文稿).有问题的代码是:

public abstract class QueueReaderTask implements Runnable {

  private boolean shutdown = false;
  protected BlockingQueue<WorkUnit<String>> lbq;

  public void run() {
    while (!shutdown) {
      try {
        WorkUnit<String> wu = lbq.poll(10, TimeUnit.MILLISECONDS);
        if (wu != null) { doAction(wu.getWork()); }
      } catch (InterruptedException e) {
        shutdown = true;
      }
    }
  }

  public abstract void doAction(String msg);
  public void setQueue(BlockingQueue<WorkUnit<String>> q) { lbq = q; }
}
Run Code Online (Sandbox Code Playgroud)

我的问题:我不认为shutdown应该宣布 …

java multithreading volatile

3
推荐指数
1
解决办法
219
查看次数

如何在NoSQL世界中实现数据库抽象/独立性

我们正在考虑在我们的Java服务器端应用程序中使用MongoDB作为我们的数据库.在我之前的项目中,我们使用Hibernate抽象底层SQL数据库,以便我们可以在不更改应用程序代码的情况下从MySQL切换到Postgres(例如).(这是Hibernate给我们提供的除了通常的ORM功能之外的一个+).
我为面向文档的NoSQL数据库搜索了一个类似的抽象层,结果没有结果!

虽然MongoDB满足了我们今天的要求,但如果一个更好的面向文档的NoSQL DB出现3年后,我们不想更改我们的应用程序代码以转移到新的数据库.

一个解决方案是我们自己编写抽象层(如果我们没有其他选项,我们就会这样做).

但是如果来自ORM世界的人们直接编码到NoSQL数据库接口上,我会感到惊讶吗?数据库独立性在NoSQL世界中不是一个问题吗?或者通过其他方式实现?

database couchdb database-migration mongodb nosql

3
推荐指数
1
解决办法
1716
查看次数

是否可以保证这将是一个生成器?

def city_generator():
    print("city gen called")
    return 1  # <--- over simplified to drive the point of the question
    yield "amsterdam"
    yield "los angeles"

>>> citygenobj = city_generator()
>>> print(citygenobj)
<generator object city_generator at 0x02CE73B0>
>>> next(citygenobj)
city gen called
Traceback (most recent call last):
  File "<pyshell#137>", line 1, in <module>
    next(citygenobj)
StopIteration: 1
Run Code Online (Sandbox Code Playgroud)

问题:此函数是否充当生成器是否取决于python实现?还是python语言规范保证如果您有一条yield语句,则无论生成器是否yield可达,它都是生成器?

python yield generator python-3.x

3
推荐指数
1
解决办法
41
查看次数

spine.js:为什么盲目地序列化POST?

在讨论另一个spine.js 问题时出现了这个问题:因为这与这个问题截然不同,我坚持SO的"每个帖子的一个问题"政策,将其作为一个新问题进行分支.

@ numbers1311407提到了这一点

spinejs将对请求进行排队并按顺序提交请求,每个连续请求仅在其前任完成后才进行.

但那似乎错了!Spine为什么要对客户端进行如此多的控制并对所有POSTS(例如)进行顺序化?如果POSTS在相关的URI上怎么办?即使Spine尝试通过为每个客户端序列化所有POST来实现某些理智,它仍然无法阻止来自不同客户端的并发和冲突的POSTS.那么,为什么要这么麻烦?

javascript ajax http spine.js

-1
推荐指数
1
解决办法
107
查看次数

为什么addListener()通常返回void?

我看到一个典型的addXXXListener()返回void!我已经将其视为一种全面的实践,无论是UI框架(如Swing)还是服务器端框架.

例如:Class:AsyncContext

public void addAsyncListener(AsyncListener listener);
Run Code Online (Sandbox Code Playgroud)

类:AbstractButton

public void addActionListener(ActionListener l)
Run Code Online (Sandbox Code Playgroud)

还有很多其他例子......

我们是否有兴趣知道添加侦听器调用是否成功完成?如果组件处于无法添加侦听器的状态,该怎么办?

例如:考虑Guava库[ListenableFuture](http://guava-libraries.googlecode.com/svn/tags/release08/javadoc/com/google/common/util/concurrent/ListenableFuture.html#addListener (java.lang).Runnable,java.util.concurrent.Executor))

它有一个

void addListener(Runnable listener, Executor exec);
Run Code Online (Sandbox Code Playgroud)

它的行为是在Future的计算完成时执行监听器.他们采取的方法是,如果Future已经完成,那么将立即调用监听器.即使未来完成了年龄的回归.用户没有迹象表明他们在已经完成的未来上不必要地调用addListener()!

我认为addListener()应该能够返回一个值(boolean?),该值表示如果可以成功添加监听器,并且如果无法添加监听器,则让调用者进行处理!

我知道必须有一些理由为什么所有addListeners都是这样编写的.我只是不知道为什么?

java coding-style return-value listener

-1
推荐指数
1
解决办法
169
查看次数