zoukankan      html  css  js  c++  java
  • 手动实现自旋锁

    package com.test;
    
    import java.util.concurrent.atomic.AtomicReference;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    /**
     * 手动写一个自旋锁
     * @author renyahui
     *
     */
    public class SelfCircleLock {
        //原子引用线程
        AtomicReference<Thread> atomicReference=new AtomicReference<Thread>(); 
        
        public void myLock(){
            Thread thread=Thread.currentThread();
            System.out.println(thread.getName()+"	 come in……");
            while(!atomicReference.compareAndSet(null, thread)){
                //System.out.println("加锁自我旋转中……");
            }
            
        }
        
        public void myUnLock(){
            Thread thread=Thread.currentThread();
            System.out.println(thread.getName()+"	  invoke myunlock……");
            while(!atomicReference.compareAndSet(thread, null)){
                System.out.println("解锁自我旋转中……");
            }
            
            
        }
    
    public static void main(String[] args) {
        final SelfCircleLock selfCircle=new SelfCircleLock();
        
        new Thread(
             new Runnable() {
                
                public void run() {
                    selfCircle.myLock();
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    selfCircle.myUnLock();
                }
            
        }).start();
        
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        new Thread(
                 new Runnable() {
                    
                    public void run() {
                        selfCircle.myLock();
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        selfCircle.myUnLock();
                    }
                
            }).start();
    
    }
    }
  • 相关阅读:
    mysql小数和类型转换函数
    concat()用法
    sql修改表名字段名
    having函数,case when与order by
    volatile实现原理与应用
    synchronized的实现原理与应用
    java8策略模式
    centos7快速升级gcc
    一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情
    Java注解
  • 原文地址:https://www.cnblogs.com/jiawen010/p/12375530.html
Copyright © 2011-2022 走看看