// Java并发编程示例:使用线程和同步块
public class ConcurrentExample {
// 定义一个共享资源
private static int sharedResource = 0;
// 定义一个锁对象,用于同步
private final Object lock = new Object();
// 线程任务类
public static class Task implements Runnable {
private final String name;
private final ConcurrentExample example;
public Task(String name, ConcurrentExample example) {
this.name = name;
this.example = example;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
example.increment();
System.out.println(name + " incremented the resource to: " + sharedResource);
}
}
}
// 同步方法,确保同一时间只有一个线程可以访问共享资源
public void increment() {
synchronized (lock) {
sharedResource++;
}
}
public static void main(String[] args) throws InterruptedException {
ConcurrentExample example = new ConcurrentExample();
// 创建两个线程,分别执行相同的任务
Thread thread1 = new Thread(new Task("Thread-1", example));
Thread thread2 = new Thread(new Task("Thread-2", example));
// 启动线程
thread1.start();
thread2.start();
// 等待线程结束
thread1.join();
thread2.join();
System.out.println("Final value of shared resource: " + sharedResource);
}
}
共享资源:sharedResource 是一个静态变量,表示多个线程之间共享的数据。由于它是静态的,所有线程都共享同一个实例。
锁对象:lock 是一个私有对象,用于在 increment 方法中进行同步。通过 synchronized 关键字,确保同一时间只有一个线程能够进入该方法,从而避免了竞态条件(race condition)。
线程任务:Task 类实现了 Runnable 接口,并定义了一个简单的任务:每个线程会循环 5 次,每次调用 increment 方法对共享资源进行递增操作。
线程启动与等待:在 main 方法中,创建了两个线程并启动它们。使用 join 方法确保主线程等待子线程完成后再继续执行,最后输出共享资源的最终值。
这个例子展示了如何使用 Java 的并发机制来保护共享资源,避免多线程环境下的数据竞争问题。
上一篇:java排序算法
下一篇:java list remove
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站