今天看了下线程中ReentrantLock类,便根据网上的资料写了个测试代码?
结果发现每次运行速度都不一样很纳闷。。。。。特来求教--哪出问题了?
ps:网上说 Tim Peierls 用一个简单的线性全等伪随机数生成器(PRNG)构建了一个简单的评测
哪位大虾有这评测,能否提供,感激不尽!
public class ReentrantLockTest {
private CyclicBarrier barrier;
private Object objTest;
private int threadNum;
public ReentrantLockTest(int threadNum) {
barrier = new CyclicBarrier(threadNum + 1);
this.threadNum = threadNum;
}
public static void main(String args[]) {
int threadCount = 5000;
ReentrantLockTest test4 = new ReentrantLockTest(threadCount);
test4.objTest = test4.new ReentrantLockUnFair();
test4.test();
ReentrantLockTest test1 = new ReentrantLockTest(threadCount);
test1.objTest = test1.new ReentrantLockFair();
test1.test();
ReentrantLockTest test2 = new ReentrantLockTest(threadCount);
test2.objTest = test2.new ReentrantLockUnFair();
test2.test();
ReentrantLockTest test3 = new ReentrantLockTest(threadCount);
test3.objTest = test3.new SynchronizedTest();
test3.test();
}
public void test() {
try {
for (int i = 0; i < threadNum; i++) {
new TestThread(objTest).start();
}
// barrier.await(); // �ȴ����������̴߳���
// long start = System.currentTimeMillis();
// barrier.await(); // �ȴ���������������
// long end = System.currentTimeMillis();
//����һ��д��
long start = System.currentTimeMillis();
barrier.await(); // �ȴ����������̴߳���
barrier.await(); // �ȴ���������������
long end = System.currentTimeMillis();
System.out.println("����ʱ��:" + (end - start) + "����");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
class TestThread extends Thread {
private Object obj;
public TestThread(Object obj) {
this.obj = obj;
}
public void run() {
try {
barrier.await();
obj.equals("");
barrier.await();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
class ReentrantLockFair {
private final Lock lock = new ReentrantLock(true);
public boolean equals(Object obj){
lock.lock();
try {
for(int i=0 ; i<10 ; i++){
}
} finally {
lock.unlock();
}
return true;
}
}
class ReentrantLockUnFair {
final Lock lock = new ReentrantLock(false);
public boolean equals(Object obj){
lock.lock();
try {
for(int i=0 ; i<10 ; i++){
}
} finally {
lock.unlock();
}
return true;
}
}
class SynchronizedTest {
public synchronized boolean equals(Object obj){
for(int i=0 ; i<10 ; i++){
}
return true;
}
}
}
分享到:
- 2009-09-03 09:51
- 浏览 928
- 评论(5)
- 论坛回复 / 浏览 (5 / 1608)
- 查看更多
相关推荐
献给有需要的人,喜欢的支持下!! 为什么多线程容易崩溃呢,我来揭秘下,测试线程运行崩溃例子 之前写多线程一直疑惑为何突然就崩溃了,一直找不到原因,经过多番测试,终于找到问题所在了。。。给新手一个提示!!
测试结果显示多线程与多进程在处理效率上几乎相同,这与人们的普遍预期不符。这一发现表明,在某些情况下,多线程的优势可能不如预期那样明显,特别是在处理简单任务时。 ### 结论 虽然多线程编程能够提高程序的...
- `SynchBankTest.java`是测试类,创建多个线程实例并运行`TransferRunnable`,模拟并发转账。通过观察和调试测试结果,我们可以验证同步机制是否有效防止了数据竞争。 4. **并发设计模式** - **生产者消费者模型...
### Python3基础教程概览与核心...- **常见问题解答**:解决初学者常见的疑惑和问题。 #### 二十三、期末总结 - **回顾与展望**:总结学习成果,规划未来发展。 - **Python 学习路线**:从基础到高级的学习路径建议。
- 论坛和技术博客:Stack Overflow、Medium等社区可以解答疑惑,分享经验。 通过深入学习和实践,结合整合型开发工具,你将能够熟练地进行手机/PDA程序设计,创造出自己的移动应用。无论是个人兴趣还是职业发展,这...
8. **多线程**:线程的创建方式(Thread类和Runnable接口),线程同步(synchronized关键字、wait()、notify()、notifyAll()方法),以及线程池的使用。 9. **反射API**:如何在运行时获取类的信息,如Class对象、...
- **错误、调试和测试**:讲解异常处理机制、调试技巧及单元测试的重要性。 #### IO编程 - **文件读写**:演示如何打开文件、读取和写入数据。 - **StringIO和BytesIO**:使用内存中的文件对象来进行字符串和二进制...
遇到疑惑时,可以将问题放到这个模型中去验证和推理,最终找到解决问题的方法。 #### 线程与并发的概念 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。并发是指在同一时间间隔内,系统处理...
在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **Java基础** - **变量与数据类型**:Java支持基本数据类型(如int、double等)和...
10. **单元测试**:学习编写和运行单元测试,使用unittest或pytest等库,确保代码的质量和可靠性。 在观看这些视频教程时,建议按照视频内容的结构逐步学习,同时配合实践项目进行巩固,理论与实践相结合是学习...
- **Module5**:可能涵盖多线程和并发,包括线程创建、同步机制(synchronized关键字、wait/notify方法)、线程池等。 - **Module6**:可能涉及到Java内存模型、垃圾回收(Garbage Collection)、类加载机制和反射...
- **技术评估**:可能会有编程测试或在线平台上的实战题目,测试开发者解决问题的能力。 - **团队文化匹配**:除了技术能力,公司也会考察求职者的沟通能力和团队协作精神。 - **职业规划**:理解自己的职业目标...
SCJP考试主要测试考生对Java编程语言的基础理解,包括语法、类库、内存管理、异常处理、多线程、输入/输出(I/O)、集合框架、反射以及JVM工作原理等方面。描述中提到的考试形式包括拖拽题、单选题和多选题。拖拽题...
本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更稳定、更高效的代码。 Java解惑部分涵盖了诸多主题,包括但不限于: 1. **内存管理**:Java的垃圾回收机制是其一大特色...
- **常见问题**:解答用户可能遇到的问题和疑惑。 **Gitbook和中文文档的价值**: 这个中文文档不仅让中国用户更容易理解SQLMap,而且通过Gitbook的版本控制系统,可以追踪文档的更新,确保用户获得最新的信息。...
- **单元测试和调试**:了解TestComplete、Jedi VCL的JUnit等工具的使用,进行单元测试和调试。 - **代码优化**:学习提高Delphi程序运行效率的方法,如内存管理、算法优化等。 - **第三方库和组件**:研究如何整合...
这些答案集将作为学习过程中的参考资料,帮助解答疑惑,提升学习效率。同时,不断地实践和反思是提升编程能力的关键,希望同学们在查阅答案的同时,也能积极参与编程实践,培养独立解决问题的能力。
6. **多线程**:Java支持多线程编程,SSD3可能包含线程的创建、同步、线程池等内容,以及如何避免线程安全问题。 7. **Java Swing或JavaFX**:如果SSD3涉及到GUI编程,那么Java的Swing或JavaFX库可能会被介绍,学习...
3. 测试:进行广泛的设备和系统版本测试,确保在各种环境下稳定运行。 五、服务端集成 系统还需要与后端服务器进行紧密集成,实现以下功能: 1. 实时同步:实时获取市场信息,更新账户余额和交易状态。 2. 交易...