草庐IT

atomic_exchange

全部标签

java - ATOMIC_MOVE 给出异常

我正在自动执行一系列操作,我们经常这样做是为了赢得一些时间。这涉及移动文件并开始一些批处理。在这种特殊情况下,我试图将文件从一个位置复制到另一个位置。一切正常,直到我尝试使用ATOMIC_MOVE复制选项。这是我的代码:privatevoidcopyToDropFolder(Datafiledatafile,Stringcompany)throwsIOException{PathdatafilePath=datafile.getDataPath();StringdropFolder=locations.getLocationFor("default");PathdropPath=Pat

java - 在 clojure 中, (= 'a ' a) 指的是 'same atom' 吗?

在CommonLISP的某些实现中,我们可以说对于以下表达式(eq'a'a)是true因为'a和'a是“同一个原子”。这可能取决于具体实现,但似乎该短语(在流行的LISP教学书中使用)假定具有相同值的原子存储在内存中的相同位置。在Java中,两个具有相同值的interned字符串存储在内存中的相同位置。现在JVM上的Clojure继承了Java的遗产,但是说Clojure(在JVM上)中具有相同值的两个原子是同一个原子是真的吗?(即Clojure的原子存储机制是如何工作的?) 最佳答案 首先,“原子”在Clojure中的含义与在大多

java - Scala 解析 RSS/Atom 提要

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭5年前。Improvethisquestion有人知道解析RSS/AtomFeeds的好的库/jar吗?我想在其中填充一个URL,并希望以同种方式获取新闻项。(意思是:Source是否包含Atom或RSS提要无关紧要。我只想返回“Items”。)在SO上浏览了一下,想出了ROME,不过目前好像比较乱(比如没有下载),而且是纯Java方案。Scala是首选,但如果不存在特定于Scala的东西,Java也可以。此外,

java - Java 中是否可以进行 "atomic"中断检查?

如果在Java中使用以下带有中断的“成语”,例如fromthisanswer.while(!Thread.currentThread().isInterrupted()){try{Objectvalue=queue.take();handle(value);}catch(InterruptedExceptione){Thread.currentThread().interrupt();}}在哪里take是一个阻塞操作,如果在检查Thread.currentThread().isInterrupted()和调用queue.take之间有中断“到达”,是否可以暂时不忽略中断()?这不是“先

java - 使用 Exchange Web 服务 Java API 下载附件?

我正在编写一个Java应用程序来使用ExchangeWeb服务下载电子邮件。我正在使用Microsoft的ewsjavaAPI来执行此操作。我能够获取电子邮件header。但是,我无法使用此API下载电子邮件附件。下面是代码片段。FolderIdfolderId=newFolderId(WellKnownFolderName.Inbox,"mailbox@example.com");findResults=service.findItems(folderId,view);for(Itemitem:findResults.getItems()){if(item.getHasAttachm

java - Java 的 Atomic* 类中的 lazySet 是如何实现的?

在thisvideo关于Disruptor,一个并发框架,提到了Java的Atomic*类(例如AtomicLong)的lazySet方法。根据documentation,此方法“最终设置为给定值”。有谁知道实现它的底层机制是什么(特别是在Windows上的x86上,如果相关的话)。不可能是InterlockedExchange(),因为这会设置值并确保在返回之前刷新缓存行,如果我没记错的话。 最佳答案 这基本上调用了unsafe.putOrderedLong(),这是一个原生函数。基于ordered(惰性)与volatile(立即

java - 同步块(synchronized block)可以比 Atomics 更快吗?

假设以下两个计数器实现:classCounter{privatefinalAtomicIntegeratomic=newAtomicInteger(0);privateinti=0;publicvoidincrementAtomic(){atomic.incrementAndGet();}publicsynchronizedvoidincrement(){i++;}}乍一看,原子应该更快,更具可扩展性。他们是,我相信。但是它们总是比synchronizedblock快吗?或者当这个规则被打破时存在某些情况(例如SMP/单CPU机器、不同的CPUISA、操作系统等)?

java - "Atomically"更新整个数组

我有一个写入线程和一个读取线程来更新和处理数组池(存储在映射中的引用)。写入与读取的比率几乎为5:1(写入延迟是一个问题)。编写器线程需要根据一些事件更新池中数组的几个元素。整个写操作(所有元素)需要是原子的。如果写入线程正在更新它(类似于volatile但在整个数组而不是单个字段上),我想确保读取线程读取先前更新的数组。基本上,我可以读取陈旧的值但不会阻塞。此外,由于写入非常频繁,因此在读/写时创建新对象或锁定整个数组的开销非常大。是否可以使用更高效的数据结构或使用更便宜的锁? 最佳答案 这个想法怎么样:编写器线程不会改变数组。它

java - 如何在 java.util.concurrent.atomic 包中定义的类中实现原子性?

我正在浏览java.util.concurrent.atomic.AtomicInteger的源代码,以了解该类提供的原子操作是如何实现原子性的。例如AtomicInteger.getAndIncrement()方法源码如下publicfinalintgetAndIncrement(){for(;;){intcurrent=get();intnext=current+1;if(compareAndSet(current,next))returncurrent;}}我无法理解在无限循环中编写操作序列的目的。它在Java内存模型(JMM)中是否有任何特殊用途。请帮我找到一个描述性的理解。提

java - 我如何使用 Java 在 RabbitMQ 中实现 Headers Exchange?

我是一个尝试在java客户端中实现Headers交换的新手。我知道这就是“x-match”绑定(bind)参数的用途。当“x-match”参数设置为“any”时,只有一个匹配的header值就足够了。或者,将“x-match”设置为“all”要求所有值都必须匹配。但是任何人都可以为我提供一个框架代码以便更好地理解。 最佳答案 要使用header交换,您只需将交换声明为header类型:channel.exchangeDeclare("myExchange","headers",true);然后您需要声明一个队列,该队列将在消费者使用