小编Rus*_*lan的帖子

为每个线程创建一个非线程安全对象并使用before-before保证

我想使用SAAJ中的SOAPConnectionFactory和MessageFactory类与多个线程,但事实证明我不能假设它们是线程安全的.一些相关的帖子:

这是一个有趣的小证据,它可以是线程安全的:http: //svn.apache.org/repos/asf/axis/axis2/java/core/tags/v1.5.6/modules/saaj/src/org/apache /axis2/saaj/SOAPConnectionImpl.java 据说

尽管SAAJ规范并未明确要求线程安全,但Sun的参考实现中的SOAPConnection似乎是线程安全的.

但我仍然不认为将SAAJ类视为线程安全是足够的证据.

所以我的问题是:下面的成语是否正确?我使用主线程内部可能非线程安全的工厂创建一个SOAPConnection和MessageFactory对象,然后使用CompletionService接口的before-before保证将这些对象安全地发布到执行程序任务.我也使用这种情况 - 在保证之前提取结果HashMap对象.

基本上我只是想验证我的推理的理智性.

public static void main(String args[]) throws Exception {
    ExecutorService executorService = Executors.newFixedThreadPool(10);
    CompletionService<Map<String, String>> completionService = new ExecutorCompletionService<>(executorService);

    //submitting 100 tasks
    for (int i = 0; i < 100; i++) {
        // there is no docs on if these classes are thread-safe or not, so creating them before submitting to the
        // external thread. This seems to be safe, because we are relying on the …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading thread-safety saaj

14
推荐指数
2
解决办法
1394
查看次数

Clojure - 使用recur vs普通递归函数调用

为什么Clojure有"复发"特殊形式?

当我用函数本身替换"recur"时,我得到相同的结果:

(defn print-down-from [x]
  (when (pos? x)
    (println x)
    (recur (dec x))
    )
  )
(print-down-from 5)
Run Code Online (Sandbox Code Playgroud)

结果与...相同

(defn print-down-from [x]
  (when (pos? x)
    (println x)
    (print-down-from (dec x))
    )
  )
(print-down-from 5)
Run Code Online (Sandbox Code Playgroud)

我想知道"recur"是否只是一个安全措施,因此如果开发人员碰巧使用非尾递归,编译器将抛出错误.或者编译器可能需要优化尾递归?

但我最想知道的是除了堆栈消费之外的任何其他原因.

recursion clojure

7
推荐指数
1
解决办法
2005
查看次数

死信时如何指定兔子信息的附加信息

我有一个兔子队列,上面有要消费的消息。我也有一个失败的听众。队列配置有死信交换(以及死信队列)。我想要的是在死信队列中的消息中看到异常信息。

当前的工作方式如下:

  1. 我将损坏的消息发送到我的普通队列。
  2. 我的侦听器(我正在使用Java的org.springframework.amqp.core.MessageListener)失败,并显示类似以下内容:“ java.lang.RuntimeException:损坏的消息”
  3. 邮件被拒绝,并通过死信交换进入死信队列。
  4. 当我查看Rabbit Admin UI中的死信时,我看到:标头:
    x-death:
    原因:被拒绝

但是我想要的是在UI上的某个地方看到“ java.lang.RuntimeException:损坏的消息”。我认为它应该是一个自定义标头?

例如,是否可以将常规try-catch放入我的侦听器,并使用异常信息增强标头?

java rabbitmq spring-rabbit spring-amqp rabbitmq-exchange

4
推荐指数
1
解决办法
1518
查看次数

RabbitTemplate接收消息并重新排队

我的问题与以下问题非常相似: RabbitTemplate接收并重新排队 不幸的是,尽管答案不符合我的需求,但它已被标记为已回答。

我想模仿Rabbit Admin UI的功能,即我想从队列中同步读取消息,但又不想让队列丢失它们,即像偷看一样。

RabbitTemplate接收和重新排队的答案建议使用侦听器,但在这种情况下,它将无限期地读取和重新排队。我只想获取和重新排队消息一次,所以我想我应该使用RabbitTemplate而不是侦听器。

spring amqp rabbitmq spring-rabbit spring-amqp

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

Clojure的喜悦:"休息与下一个"样本在我的REPL中不会产生相同的结果

以下是"Clojure的喜悦"摘录:

使用iterate创建可能无限的整数序列时,每次生成新值时打印一个点,然后使用rest或next返回序列的前三个值会发生什么?rest和next之间的区别可以在以下示例中看到:

(def非常懒( - >(迭代#(do(print.)(inc%))1)休息休息)); => ..#'user/very-lazy

(def less-lazy( - >(迭代#(do(print.)(inc%))1)next next next)); => ...#'user/less-lazy

如图所示,下一个版本打印了三个点,而其余版本只打印了两个.当从另一个构建一个懒的seq时,rest不会导致计算(或实现)任何超出它需要的元素; 接下来呢.为了确定seq是否为空,接下来需要检查其中是否至少有一个东西,因此可能导致一个额外的实现.这是一个例子:

(println(first very-lazy)); 0.4

(println(first less-lazy)); 4

这是我在"Cursive IDE"REPL中得到的:

(def very-lazy (-> (iterate #(do (print \.) (inc %)) 1)
               rest rest rest))
..=> #'user/very-lazy
(def less-lazy (-> (iterate #(do (print \.) (inc %)) 1)
               next next next))
..=> #'user/less-lazy
(println (first very-lazy)) ; .4
.4
=> nil
(println (first less-lazy)) ; 4
.4
=> nil
Run Code Online (Sandbox Code Playgroud)

我想我确实理解了不同行为的解释,但为什么输出在我的REPL中是相同的?

clojure

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