阻塞线程:A,B线程有一个公共的资源,比如说变量params,当A访问params时,给params加锁,而这时B要访问params时,它只有等待A释放params锁时,才可以访问;
非阻塞线程:A,B线程有一个公共的资源,比如说变量params,当A访问params时,B也可以进行访问操作;
上网查了一下资料,说非阻塞线程的性能高于阻塞线程,我就想是否可以使用非阻塞线程写出票的程序用来提高出票速度,然后我做了简单的测试:
测试环境:
1)64位win7系统,4g内存;
2)eclipse编译器;
测试背景:
1) 票的总数为10000,分别使用非阻塞,阻塞方法编写线程进行出票,然后分别开100个线程去跑,计算当票的数量为0时,所使用的时间;
测试结果:
1) 阻塞线程
主要代码:
运行时间:
2) 非阻塞线程
主要代码:
运行时间:
可以看出阻塞线程比非阻塞线程慢很多。
阻塞,我使用的是synchronized,非阻塞用的是cas,synchronized是悲观锁,而cas是乐观锁。
悲观锁:指对数据被外界修改保持保守态度,就是说在进行操作数据时,数据可能会被外界修改,所以在整个操作数据过程中,都会加上锁;
乐观锁:与悲观锁相反,在进行操作数据的时候,不会加上锁,而是通过版本号或者其他标志来对数据进行对比,然后在决定是否修改数据;
所以就造成上面的结果。