java线程访问临界资源
时间: 2023-09-02 09:10:02 浏览: 45
Java线程访问临界资源时,需要通过同步机制来保证线程安全。临界资源是指多个线程共享的资源,例如共享内存、共享文件等。
Java提供了多种同步机制来保证线程安全,最常见的有synchronized关键字和Lock接口。下面分别介绍一下它们的使用方法:
1. synchronized关键字
synchronized关键字可以用来修饰方法或代码块,它的作用是获取对象的锁,保证同一时刻只有一个线程可以访问被锁定的资源。
示例代码:
```
public class MyThread implements Runnable {
private int count = 0;
public synchronized void run() {
for (int i = 0; i < 10; i++) {
count++;
System.out.println(Thread.currentThread().getName() + ": " + count);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
在这个例子中,我们定义了一个MyThread类,它实现了Runnable接口。在run方法中,我们使用synchronized关键字来修饰整个方法,这样就能保证同一时刻只有一个线程可以执行这个方法。
2. Lock接口
Lock接口是Java中提供的另一种同步机制,它提供了比synchronized关键字更灵活的锁定机制,例如可以设置超时时间、可中断等。
示例代码:
```
public class MyThread implements Runnable {
private int count = 0;
private Lock lock = new ReentrantLock();
public void run() {
lock.lock();
try {
for (int i = 0; i < 10; i++) {
count++;
System.out.println(Thread.currentThread().getName() + ": " + count);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} finally {
lock.unlock();
}
}
}
```
在这个例子中,我们定义了一个MyThread类,它实现了Runnable接口。在run方法中,我们使用Lock接口来锁定代码块,保证同一时刻只有一个线程可以访问被锁定的资源。在finally块中释放锁,保证锁的正常释放。
总之,Java线程访问临界资源时需要使用同步机制保证线程安全。synchronized关键字和Lock接口是两种常见的同步机制,它们都可以保证同一时刻只有一个线程可以访问被锁定的资源,但Lock接口提供了更灵活的锁定机制。