测试一:不使用线程互斥:
打印:
Thread-5 : 3
Thread-4 : 3
Thread-6 : 4
Thread-5 : 6
Thread-6 : 6
Thread-4 : 8
Thread-6 : 9
Thread-4 : 9
Thread-5 : 9
Thread-5 : 12
Thread-4 : 12
Thread-6 : 12
Thread-4 : 15
Thread-5 : 15
Thread-6 : 17
由数据可见,darkstar并不能完全的实现线程互斥,因为Thread-5 : 3 Thread-4 : 3 数据是相同的。为什么说是不能完全的实现线程互斥!因为即便Thread-5 : 3 Thread-4 : 3 数据是相同的,但总的数据是改变的:
Thread-5 : 3 3
Thread-4 : 3 4
Thread-6 : 4 5
Thread-5 : 6 6
Thread-6 : 6 7
Thread-4 : 8 8
Thread-6 : 9 9
Thread-4 : 9 10
Thread-5 : 9 11
Thread-5 : 12 12
Thread-4 : 12 13
Thread-6 : 12 14
Thread-4 : 15 15
Thread-5 : 15 16
Thread-6 : 17 17
故darkstar在处理并发性的方案,并非按照线程互斥的思想思想的。更多,请阅读pds服务器端设计文档!
测试二:使用线程互斥:
修改MyThread类的run()
// p.noSyncMethod();
p.syncMethod();
打印:
Thread-4 : 1
Thread-4 : 2
Thread-4 : 3
Thread-4 : 4
Thread-6 : 5
Thread-5 : 6
Thread-5 : 7
Thread-5 : 8
Thread-5 : 9
Thread-6 : 10
Thread-6 : 11
Thread-6 : 12
Thread-4 : 13
……
但,这样的执行条件将导致程序执行事件过长,一个任务必须等待另外一个任务完成后才能使用!而darkstar默认的Task,以100ms为界,显然这样是不符合要求的!
本文通过两个测试案例对比分析了不使用线程互斥与使用线程互斥时的程序行为差异,展示了线程互斥的重要性及其对并发操作的影响。
1717

被折叠的 条评论
为什么被折叠?



