阻塞线程与非阻塞线程

时间:2021-10-13 14:43:25

  阻塞线程:AB线程有一个公共的资源,比如说变量params,当A访问params时,给params加锁,而这时B要访问params时,它只有等待A释放params锁时,才可以访问;

 非阻塞线程:AB线程有一个公共的资源,比如说变量params,当A访问params时,B也可以进行访问操作;

上网查了一下资料,说非阻塞线程的性能高于阻塞线程,我就想是否可以使用非阻塞线程写出票的程序用来提高出票速度,然后我做了简单的测试:

测试环境:

164win7系统,4g内存;

 2eclipse编译器;

测试背景:

1)  票的总数为10000,分别使用非阻塞,阻塞方法编写线程进行出票,然后分别开100个线程去跑,计算当票的数量为0时,所使用的时间;

测试结果:

1)  阻塞线程

主要代码:

阻塞线程与非阻塞线程

运行时间:

阻塞线程与非阻塞线程

2)  非阻塞线程

主要代码:

阻塞线程与非阻塞线程

运行时间:

阻塞线程与非阻塞线程

可以看出阻塞线程比非阻塞线程慢很多。

阻塞,我使用的是synchronized,非阻塞用的是cassynchronized是悲观锁,而cas是乐观锁。

悲观锁:指对数据被外界修改保持保守态度,就是说在进行操作数据时,数据可能会被外界修改,所以在整个操作数据过程中,都会加上锁;

乐观锁:与悲观锁相反,在进行操作数据的时候,不会加上锁,而是通过版本号或者其他标志来对数据进行对比,然后在决定是否修改数据;

所以就造成上面的结果。