如何在Java中实现代码块加锁

1. 概述

在Java中,我们可以通过使用synchronized关键字或者Lock接口来实现代码块的加锁。在本文中,我们将使用synchronized关键字来演示如何在Java中实现代码块加锁的方法。

2. 实现步骤

下面是实现代码块加锁的步骤,我们将通过表格展示每个步骤:

步骤 描述
1 创建一个共享资源对象
2 创建一个线程类,实现Runnable接口
3 在线程类中实现run方法,并在其中加锁的代码块
4 创建多个线程对象,传入共享资源对象
5 启动多个线程对象

3. 代码示例

3.1 共享资源对象

public class SharedResource {
    private int count = 0;

    public void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }
}

3.2 线程类

public class MyThread implements Runnable {
    private SharedResource sharedResource;

    public MyThread(SharedResource sharedResource) {
        this.sharedResource = sharedResource;
    }

    @Override
    public void run() {
        synchronized (sharedResource) { // 加锁的代码块
            sharedResource.increment();
            System.out.println(Thread.currentThread().getName() + " - count: " + sharedResource.getCount());
        }
    }
}

3.3 主程序

public class Main {
    public static void main(String[] args) {
        SharedResource sharedResource = new SharedResource();
        MyThread thread1 = new MyThread(sharedResource);
        MyThread thread2 = new MyThread(sharedResource);
        
        Thread t1 = new Thread(thread1);
        Thread t2 = new Thread(thread2);
        
        t1.start();
        t2.start();
    }
}

4. 类图

classDiagram
    class SharedResource {
        count: int
        increment()
        getCount(): int
    }
    
    class MyThread {
        sharedResource: SharedResource
        run()
    }
    
    class Main {
        main()
    }
    
    SharedResource "1" -- "1..*" MyThread
    Main -- MyThread

5. 序列图

sequenceDiagram
    participant Main
    participant MyThread
    participant SharedResource

    Main ->> SharedResource: 实例化SharedResource
    Main ->> MyThread: 实例化MyThread
    Main ->> Thread: 创建并启动Thread
    Thread ->> MyThread: 调用run方法
    MyThread ->> SharedResource: 加锁的代码块

6. 总结

通过本文的介绍,你应该已经了解到如何在Java中实现代码块加锁的方法。首先,需要创建一个共享资源对象,然后创建一个线程类实现Runnable接口,并在其中加上加锁的代码块。最后,创建多个线程对象,将共享资源对象传入并启动多个线程对象。这样就能确保多个线程在访问共享资源时是安全的。希望这篇文章对你有所帮助!