JRuby中的Clojure STM

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JRuby中的Clojure STM相关的知识,希望对你有一定的参考价值。

  1. require "java"
  2. require "clojure.jar"
  3. include_class "clojure.lang.LockingTransaction"
  4. include_class "clojure.lang.Ref"
  5.  
  6. my_account = Ref.new(1)
  7.  
  8. puts "Initial value #{my_account.deref}"
  9.  
  10. begin
  11. my_account.set(1000)
  12. rescue java.lang.IllegalStateException
  13. puts "Reference updated outside a transaction.. Naughty.. :)"
  14. end
  15.  
  16. puts "Value after failed update #{my_account.deref}"
  17.  
  18. Thread.new {LockingTransaction.run_in_transaction(Proc.new { my_account.set 1000 })}
  19.  
  20. Thread.new {LockingTransaction.run_in_transaction(Proc.new { sleep 0.1; my_account.set 21000 })} # Will fail because get commited after first transaction
  21.  
  22. puts "Value after successful transaction #{my_account.deref}"

以上是关于JRuby中的Clojure STM的主要内容,如果未能解决你的问题,请参考以下文章

mingw / git bash shell中的jRuby问题

部署为 WAR 时 JRuby 中的线程安全 Resque Workers

JavaClojure快餐教程-运行在JVM上的Lisp方言

Groovy映射作为JRuby中的接口方法

OSX 上 JRuby irb 中的键绑定移动字

从jruby访问Java类中的静态字段