0

0

java并发程序测试实例教程

零下一度

零下一度

发布时间:2017-06-25 10:25:26

|

1658人浏览过

|

来源于php中文网

原创

并发程序测试

 一、正确性测试

  如:对一个自定义缓存的测试

//自定义的缓存public class SemaphoreBoundedBuffer  {private final Semaphore availableItems, availableSpaces;private final E[] items;private int putPosition = 0, takePosition = 0;public SemaphoreBoundedBuffer(int capacity) {if (capacity <= 0)throw new IllegalArgumentException();
        availableItems = new Semaphore(0);
        availableSpaces = new Semaphore(capacity);
        items = (E[]) new Object[capacity];
    }public boolean isEmpty() {return availableItems.availablePermits() == 0;
    }public boolean isFull() {return availableSpaces.availablePermits() == 0;
    }public void put(E x) throws InterruptedException {
        availableSpaces.acquire();
        doInsert(x);
        availableItems.release();
    }public E take() throws InterruptedException {
        availableItems.acquire();
        E item = doExtract();
        availableSpaces.release();return item;
    }private synchronized void doInsert(E x) {int i = putPosition;
        items[i] = x;
        putPosition = (++i == items.length) ? 0 : i;
    }private synchronized E doExtract() {int i = takePosition;
        E x = items[i];
        items[i] = null;
        takePosition = (++i == items.length) ? 0 : i;return x;
    }
}//无需比较每次 生产者和消费者取出的值;只需要最终比较和即可public class PutTakeTest extends TestCase {protected static final ExecutorService pool = Executors.newCachedThreadPool();protected CyclicBarrier barrier;protected final SemaphoreBoundedBuffer bb;protected final int nTrials, nPairs;protected final AtomicInteger putSum = new AtomicInteger(0);protected final AtomicInteger takeSum = new AtomicInteger(0);public static void main(String[] args) throws Exception {new PutTakeTest(10, 10, 100000).test(); // sample parameters        pool.shutdown();
    }public PutTakeTest(int capacity, int npairs, int ntrials) {this.bb = new SemaphoreBoundedBuffer(capacity);this.nTrials = ntrials;this.nPairs = npairs;this.barrier = new CyclicBarrier(npairs * 2 + 1);   //初始化为 线程数量*2 + 1:生产者+消费者+主线程    }void test() {try {for (int i = 0; i < nPairs; i++) {
                pool.execute(new Producer());
                pool.execute(new Consumer());
            }
            barrier.await(); // 等待所有线程初始化完成,完成后复位栅栏barrier.await(); // 等待所有线程执行完成assertEquals(putSum.get(), takeSum.get());      //执行比较,判断线程安全性能} catch (Exception e) {throw new RuntimeException(e);
        }
    }static int xorShift(int y) {    //生成随机数y ^= (y << 6);
        y ^= (y >>> 21);
        y ^= (y << 7);return y;
    }class Producer implements Runnable {public void run() {try {int seed = (this.hashCode() ^ (int) System.nanoTime());int sum = 0;
                barrier.await();                        //等待所有线程初始化完成for (int i = nTrials; i > 0; --i) {
                    bb.put(seed);
                    sum += seed;
                    seed = xorShift(seed);
                }
                putSum.getAndAdd(sum);
                barrier.await();                        //等待所有线程执行完成} catch (Exception e) {throw new RuntimeException(e);
            }
        }
    }class Consumer implements Runnable {public void run() {try {
                barrier.await();                        //等待所有线程初始化完成int sum = 0;for (int i = nTrials; i > 0; --i) {
                    sum += bb.take();
                }
                takeSum.getAndAdd(sum);
                barrier.await();                        //等待所有线程执行完成} catch (Exception e) {throw new RuntimeException(e);
            }
        }
    }
}

 

立即学习Java免费学习笔记(深入)”;

EnablePPA中小学绩效考核系统2.0
EnablePPA中小学绩效考核系统2.0

无论从何种情形出发,在目前校长负责制的制度安排下,中小学校长作为学校的领导者、管理者和教育者,其管理水平对于学校发展的重要性都是不言而喻的。从这个角度看,建立科学的校长绩效评价体系以及拥有相对应的评估手段和工具,有利于教育行政机关针对校长的管理实践全过程及其结果进行测定与衡量,做出价值判断和评估,从而有利于强化学校教学管理,提升教学质量,并衍生带来校长转变管理观念,提升自身综合管理素质。

下载

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

 

立即学习Java免费学习笔记(深入)”;

  

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

493

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

16

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.2万人学习

C# 教程
C# 教程

共94课时 | 5.9万人学习

Java 教程
Java 教程

共578课时 | 41.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号