您当前的位置: 首页 >  Java

郭梧悠

暂无认证

  • 4浏览

    0关注

    402博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java线程知识点拾遗(排队CAS)

郭梧悠 发布时间:2019-08-28 15:16:52 ,浏览量:4

在java线程知识点拾遗(CAS)这篇文章中简单的介绍了cas的概念,但是普通的cas是有一个非公平的问题,多个线程需要共享资源的时候可能造成忙等待问题,一言以蔽之就是可能后请求共享资源的线程可能比先请求资源的线程优先获取到资源。 用个例子来说明cas的非公平性,代码如下:

public class UnFairCasLock implements Runnable {
	private AtomicBoolean V = new AtomicBoolean(true);
	private boolean A = true;
	private boolean B = false;

	@Override
	public void run() {
		lock();
		PrintUtils.println("服务员为"+Thread.currentThread().getName()+"打菜中");
		ThreadUtils.sleep(2000);
		unlock();
	}

	//模拟自旋
	private void lock() {
		while (!V.compareAndSet(A, B)) {
			// 加一个sleep操作,防止while循环过快执行
			ThreadUtils.sleep(1000);

		}
	}

	private void unlock() {
		V.compareAndSet(B, A);
	}

然后初始化多个线程来访问,用来模拟食堂服务员打菜的逻辑:

	public static void main(String args[]) {
		UnFairCasLock unFairCasLock = new UnFairCasLock();
		char name='A';
		for(int i=1;i            
关注
打赏
1663674776
查看更多评论
0.0387s