首页 > 代码库 > java 自旋锁
java 自旋锁
package spinlock; import java.util.concurrent.atomic.AtomicReference; public class SpinLockTest implements Runnable{ private static int count = 0; private static SpinLock spinLock = new SpinLock(); /** * @param args */ @SuppressWarnings("static-access") public static void main(String[] args) { for (int i = 0; i < 100000; i++) { Thread thread = new Thread(new SpinLockTest()); thread.start(); } System.out.println("here"); try { Thread.currentThread().sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(count); } @Override public void run() { spinLock.lock(); count++; spinLock.unlock(); } } /** * 自旋锁 让其他线程不断的循环等待着去用自身线程引用去加锁(当锁的竞争不大且,锁的时间段比较长的时候适用)。 */ class SpinLock { private AtomicReference<Thread> sign = new AtomicReference<Thread>(); public void lock() { Thread current = Thread.currentThread(); System.out.println(Thread.currentThread().getName() + " wait"); while (!sign.compareAndSet(null, current)) { } } public void unlock() { Thread current = Thread.currentThread(); sign.compareAndSet(current, null); } }
java 自旋锁
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。