如何在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接口,并在其中加上加锁的代码块。最后,创建多个线程对象,将共享资源对象传入并启动多个线程对象。这样就能确保多个线程在访问共享资源时是安全的。希望这篇文章对你有所帮助!