您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 2浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java并发多线程编程——手动实现锁和重入锁示例

小志的博客 发布时间:2021-04-20 21:54:34 ,浏览量:2

目录
    • 一、重入锁的理解
    • 二、手动实现锁示例
    • 三、手动实现重入锁示例

一、重入锁的理解
  • 参考此博文:https://wwwxz.blog.csdn.net/article/details/115761429
二、手动实现锁示例

1、创建MyLock类并实现Lock接口

package com.xz.thread.t9;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;

/**
 * @description: 手动实现锁
 *               其中只实现lock和unlock方法
 * @author: xz
 */
public class MyLock implements Lock {
    private boolean isLocked = false;
    //获取锁
    @Override
    public synchronized void lock() {
        while(isLocked){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        isLocked =true;
    }
    //释放锁
    @Override
    public synchronized void unlock() {
        isLocked =false;
        notify();
    }

    @Override
    public void lockInterruptibly() throws InterruptedException {

    }

    @Override
    public boolean tryLock() {
        return false;
    }

    @Override
    public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
        return false;
    }



    @Override
    public Condition newCondition() {
        return null;
    }

}

2、创建多线程获取值的Sequeues类

package com.xz.thread.t9;

/**
 * @description: 手动实现锁示例
 * @author: xz
 */
public class Sequeues {
    private  int value;

    MyLock myLock=new MyLock();

    public int getValue(){
        myLock.lock();
        value++;
        myLock.unlock();
        return value;
    }

    public static void main(String[] args) {
        Sequeues sequeues=new Sequeues();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i            
关注
打赏
1661269038
查看更多评论
0.0427s