Tag: 同步

Scala 2.10-M1和2.9同时在Devel机器上?

编辑: 得到它排序,SCALA_HOME + / bin到PATH设置默认解释器; 即从bash提示符输入“scala”在我的情况下调用2.9.1。 刚刚下载2.10.0.M1。 从bash中调用/path/to/2.10/bin/scala调出2.10 REPL。 我只是添加一个2.10的终端别名,所以我不必手动输入路径。 原版的: 我是否需要一个客户虚拟机来解决这个问题,或者在Linux中,我可以以某种方式运行2.10和2.9并行? 基本上,我想用2.10-M1反射进行试验,看看在继续进行一般的2.9.1开发的同时,我可以在case类上发生什么样的运行时间混乱。 如果没有,一个科特林式的网络演示肯定会很好,在2.10进化过程中混乱…

Kotlin,竞赛条件问题

相关的代码在这里 本质上,我们有两个线程,一个是引导保持调用display()的渲染,另一个是关注用户输入,相应地调用相应的鼠标或键事件 对于相机和物体来说,视极和对象极点都不是帮助类的辅助类。 他们的方法都是从display()和用户输入方法中调用的。 当输入线程间接调用它们时, objectpole.calcMatrix()同时调用viewpole.calcMatrix()和objectpole.calcMatrix() ,例如basicLighting.mouseDragged() – > objectpole.mouseDragged() – > rotateView() – > calcMatrix() 当我开始使用池对象来降低特定场景中的GC压力时,竞态条件开始出现。 我查了几十次,每个对象都只用了一次(除了用的when )。 我通过打印每个display()调用的视图矩阵来检测竞争状态。 只要不一样,就意味着我得到了一个。 这里是一个例子。 调查中,我发现使用简单的println ,例如, Viewpole.calcMatrix()有时在另一个调用完成之前得到调用,完全执行它。 在每个calcMatrix() (viewpole和objectpole)上添加@Synchronized减少了很多,我说80/90%。 但是,有时候,我还经历了种族的状况。 我试图synchronize(lock){}也来自用户输入线程的每个调用,如下所示: val lock = Any() override fun mousePressed(e: MouseEvent) { synchronized(lock) { viewPole.mousePressed(e) objectPole.mousePressed(e) } } 它没有帮助。 我究竟做错了什么? 什么是正确的方式来实现我的情况下的同步? 也就是说,两个线程调用同一个类。

Kotlin:“synchronized”使编译器不能确定变量的初始化

让我们设想下一个Kotlin代码,它通过一个JDBC连接器对数据库执行一些查询: var results : ResultSet preparedStatement.clearParameters() preparedStatement.setInt(1,value1); preparedStatement.setInt(2,value2) results = preparedStatement.executeQuery() while(results.next()) { // parse results } 编译没有问题。 但是,当我尝试添加线程安全性以访问preparedStatement时: var results : ResultSet synchronized(preparedStatement) { preparedStatement.clearParameters() preparedStatement.setInt(1,value1); preparedStatement.setInt(2,value2) results = preparedStatement.executeQuery() } while(results.next()) { // parse results } …我得到了一个“变量”结果“必须初始化” 。 看起来synchronized块作为一个条件块,但你可以肯定它会在while块之前执行一次。 我已经在Java中实现了这个相同的块,我没有得到错误。 这是Kotlin的设计/实现错误吗? 还是有一个很好的理由来表达呢?