并发程序中潜在错误的发生并不具有确定性,而是随机的. 安全性测试:通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致 活跃性测试:进展测试和无进展测试两方面,这些都是很难量化的(性能:即吞吐量,响应性,可伸缩性测试) 一.正确性测试 重点:找出需要检查的不变性条件和后验条件 1.对基本单元的测试——串行的执行 1 public class BoundedBufferTests { 2 3 @Test 4 public void testIsEmptyWhenConstruct…
并发程序测试 一.正确性测试 如:对一个自定义缓存的测试 //自定义的缓存 public class SemaphoreBoundedBuffer <E> { private final Semaphore availableItems, availableSpaces; private final E[] items; private int putPosition = 0, takePosition = 0; public SemaphoreBoundedBuffer(int capaci…
java并发程序和共享对象实用策略 在并发程序中使用和共享对象时,可以使用一些实用的策略,包括: 线程封闭 只读共享.共享的只读对象可以由多个线程并发访问,但任何线程都不能修改它.共享的只读对象包括不可变对象和事实不可变对象 线程安全共享.线程安全地对象在器内部实现同步. 保护对象.被保护的对象只能通过持有特定的锁来方访问. 线程封闭 当访问共享的可变数据时,通常需要使用同步.一种避免使用同步的方式就是不共享数据.如果仅在单线程内访问数据,就不需要同步.这种技术被称为线程封闭,它是实现线程安全性…
做完了 scala parallel 课程作业后,觉得 scala 写并发程序的便捷性是 java 永远都追不上的.scala 的Future 和 Promise,java 里 Future 和 CompleteFuture 实现了类似的功能,但是使用的便捷性还差的很远,java.util.Future 本身 API 较少,不支持链式操作.CompleteFuture 丰富了 Future 的 API,但是也不好用. 这里用 Scala parallel 学到的东西计算 Inversion. I…
http://blog.itpub.net/16832682/viewspace-1249765/ 最近因为项目上出现了PL/SQL性能的问题,因此需要对已经开发好的并发程序进行调优的工作.调优有个很重要的步骤就是获取并发程序的trace file,从而才能知道是哪一段SQL出现了问题.下面就针对如何获取并发程序的trace file做个归纳:1.在并发程序注册页面启动跟踪功能:2.提交并发,待并发跑完之后获取trace ID,可以用如下代码来完成: SELECT 'Request id: '…
--并发程序运行信息SELECT REQUEST_ID,       PROGRAM,       actual_start_date 开始日期,       ACTUAL_COMPLETION_DATE 完成日期,       ROUND((TO_NUMBER(ACTUAL_COMPLETION_DATE - actual_start_date) * 24 * 60) / 60,             2) RUN_TIME,       '小时' 单位,       LAST_UPDATE…
异步风格的函数: 继续来学习async相关的东东,对于它其实可以用到函数上,也就是用它可以定义一个异步风格的函数,然后在该函数中再来调用普通的函数,下面来瞅一下: 其实“GlobalScope.async()”就是调用咱们之前直接调用async的扩展函数,如下: 此时我们来调用一下,这里就直接可以调用既可,而不像之前是在runBlocking中来调用的,如下: 看一下提示: 所以此时咱们将其放到协程中,用runBlocking: 好,下面运行一下: 其结果比较好理解,但是!!!其实这个代码还是有…
前言 下面简单总结学习Java并发的笔记,关于如何利用面向对象思想写好并发程序的建议.面向对象的思想和并发编程属于两个领域,但是在Java中这两个领域却可以融合到一起.在Java语言中,面向对象编程的思想能够让并发编程变得更加简单.下面将从封装共享变量.识别共享变量间的约束条件和制定并发访问策略三方面介绍如何使用面向对象思想去指导编写并发程序. 封装共享变量 在并发编程中,格外关心的一个重点便是多线程对共享变量的访问问题.我们需要控制好对共享变量的访问接口.面向对象就有一个非常好的特性:封装(将…
并发刺客(False Sharing)--并发程序的隐藏杀手 前言 前段时间在各种社交平台"雪糕刺客"这个词比较火,简单的来说就是雪糕的价格非常高!其实在并发程序当中也有一个刺客,如果在写并发程序的时候不注意不小心,这个刺客很可能会拖累我们的并发程序,让我们并发程序执行的效率变低,让并发程序付出很大的代价,这和"雪糕刺客"当中的"刺客"的含义是一致的.这个并发程序当中的刺客就是--假共享(False Sharing). 假共享(False Sha…
摘要:Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结果后得到最终结果. 本文分享自华为云社区<如何使用Java7提供的Fork/Join框架实现高并发程序?>,作者:冰 河. Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结…