• 手动实现自旋锁


    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的去重
    java_集合框架概述
    java_泛型
    10base-t的数据发送
    bash编辑功能,在命令行里编辑快捷键
    cisco ios 密码恢复
    OSPF邻居状态
    查找修补文件差异diff、patch
    生成ISO文件
    shell 生成文件统计信息
  • 原文地址:https://www.cnblogs.com/jiawen010/p/12375530.html
Copyright © 2020-2023  润新知