模拟互斥锁的实现

在并发交互的进程中存在竞争关系和协调关系,互斥锁就是用来实现竞争的进程的同步的

竞争主要是体现在临界区的访问上的,临界区是访问共享资源的一段代码块,进程通过访问临界区进而访问共享资源。因为对临界资源异步的进行访问,可能会使得我们程序出现因为访问顺序错误而产生的错误

我们的程序通过java的多线程来模拟多线程并发执行的环境,通过对互斥锁2个重要的方法的实现来模拟互斥锁的功能
lock():检查锁的状态:1.锁关闭则进入自旋等待 2.锁打开则设置锁为关闭状态
unlock():将锁的状态设置为打开状态

  • 互斥锁工具类
package com.os;

import java.util.concurrent.BlockingDeque;

//提供互斥锁的方法
public class MutexUtils {
    private static boolean lock = true;//默认锁是打开的
    private MutexUtils(){};
    public static void lock(){
        while (!lock){//测试锁的状态

        }
        lock = false;//关闭锁(设置锁)
    }
    public static void unlock(){
        lock = true;//打开锁
    }
}

  • 线程工作类
package com.os;
//多线程售卖电影票
public class MyThread extends Thread{
    private static int ticket = 1000000;//票数为100张
    @Override
    public void run() {
        while (ticket>0){
            MutexUtils.lock();
            System.out.println("线程"+Thread.currentThread().getName()+"正在卖第"+(1000001-ticket)+"张票");

            ticket--;
            MutexUtils.unlock();

        }

    }
}

  • 测试类
package com.os;

public class MutexTest {
    public static void main(String[] args) {
        MyThread myThread1 = new MyThread();
        MyThread myThread2 = new MyThread();
        MyThread myThread3 = new MyThread();
        myThread1.start();
        myThread2.start();
        myThread3.start();
    }
}

  • 对买票实现了同步
posted @ 2023-10-23 19:31  一往而深,  阅读(5)  评论(0编辑  收藏  举报