实验目的:通过该实验实现多线程的同步问题,即限制某个资源在同一时刻只能被一个线程访问从而实现多线程操作“共享资源” 实验要求: 1. 分别利用Runnable接口和Callable接口实现线程 2. 分别是由同步代码段、同步方法和同步锁的方法实现线程同步
时间: 2025-02-09 19:17:34 浏览: 31
实验目的是为了理解和应用多线程中的同步控制机制,特别是在处理"共享资源"时,防止并发访问导致的数据不一致或竞态条件。以下是实验的具体要求:
1. **使用Runnable接口**:你可以创建一个实现了Runnable接口的类,内部包含需要同步的共享资源。然后,在run()方法中,使用synchronized关键字或Lock接口(如ReentrantLock)来保证对共享资源的独占访问。例如:
```java
class SharedResource implements Runnable {
private int resource;
// 使用ReentrantLock或其他锁
private Lock lock = new ReentrantLock();
public synchronized void accessResource() {
// 线程在此处获取锁并访问资源
}
@Override
public void run() {
lock.lock();
try {
// 对共享资源的操作
} finally {
lock.unlock();
}
}
}
// 创建并启动线程
Thread thread1 = new Thread(new SharedResource());
thread1.start();
```
2. **使用Callable接口**:这种方式结合了Future和ExecutorService,可以返回值。同样地,可以在call()方法中添加同步控制。示例:
```java
class CallableResource implements Callable<Integer> {
private int resource;
private Lock lock = new ReentrantLock();
@Override
public Integer call() throws Exception {
lock.lock();
try {
// 访问并操作资源
return resource;
} finally {
lock.unlock();
}
}
}
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(new CallableResource());
try {
Integer result = future.get(); // 获取计算结果
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown();
```
对于线程同步的实现,主要涉及同步代码段(使用`synchronized`)、同步方法(在其上加上`synchronized`修饰符)以及使用Lock接口提供的显式锁定和解锁功能。
阅读全文
相关推荐




















