并发编程题目怎么写的

时间:2025-01-26 14:07:02 网络游戏

并发编程题目通常涉及多线程的同步、互斥、通信等问题。下面是一个简单的并发编程题目的示例,以及如何使用Java语言解决它。

题目描述

实现一个线程安全的计数器类,该计数器需要支持并发访问。计数器需要提供以下操作:

`increment()`: 增加计数器的值

`getCount()`: 获取计数器的当前值

要求:

`increment()` 操作不应该阻塞 `getCount()` 操作。

提供可靠的原子操作。

示例代码

```java

import java.util.concurrent.atomic.AtomicInteger;

public class ThreadSafeCounter {

private AtomicInteger counter = new AtomicInteger(0);

public void increment() {

counter.incrementAndGet();

}

public int getCount() {

return counter.get();

}

public static void main(String[] args) throws InterruptedException {

ThreadSafeCounter counter = new ThreadSafeCounter();

// 创建两个线程,一个用于增加计数器,一个用于获取计数器的值

Thread t1 = new Thread(() -> {

for (int i = 0; i < 1000; i++) {

counter.increment();

}

});

Thread t2 = new Thread(() -> {

for (int i = 0; i < 1000; i++) {

System.out.println("Current count: " + counter.getCount());

}

});

t1.start();

t2.start();

t1.join();

t2.join();

System.out.println("Final count: " + counter.getCount());

}

}

```

解释

AtomicInteger : `AtomicInteger` 是 Java 提供的原子整数类,它提供了原子操作,确保在多线程环境下对整数的增加操作是线程安全的。

increment():

使用 `incrementAndGet()` 方法来增加计数器的值,这个方法内部是原子的。

getCount():

使用 `get()` 方法来获取计数器的当前值,这个方法也是原子的。

main() 方法:

创建两个线程,一个用于增加计数器,一个用于获取计数器的值。通过 `join()` 方法确保主线程等待两个子线程执行完毕后再继续执行。

建议

在编写并发程序时,了解并掌握 `java.util.concurrent` 包下的类和方法,如 `AtomicInteger`、`ReentrantLock`、`Semaphore` 等,这些工具类可以帮助你更高效地实现线程安全的代码。

在设计并发程序时,要特别注意线程安全和性能之间的平衡,避免过度使用锁和等待,以免影响程序的性能。