Java多线程并发编程:竞态条件示例

原创 超、凢脫俗 2024-12-01 07:21 52阅读 0赞

在Java多线程并发编程中,竞态条件是指多个线程同时访问和修改共享资源,导致的结果无法预期。

以下是一个简单的竞态条件示例:

  1. // 假设我们有一个计数器类
  2. public class Counter {
  3. private int count = 0;
  4. public synchronized void increment() {
  5. count++;
  6. }
  7. public synchronized int getCount() {
  8. return count;
  9. }
  10. }
  11. // 创建两个线程,一个增加计数器,另一个查看当前计数器
  12. public class RaceConditionDemo {
  13. public static void main(String[] args) {
  14. Counter counter = new Counter();
  15. // 线程1:增加计数器
  16. Thread thread1 = new Thread(() -> {
  17. for (int i = 0; i < 10; i++) {
  18. counter.increment();
  19. }
  20. }));
  21. // 线程2:查看当前计数器
  22. Thread thread2 = new Thread(() -> {
  23. for (int i = 0; i < 5; i++) {
  24. System.out.println("Counter count: " + counter.getCount());
  25. try {
  26. Thread.sleep(100);
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }));
  32. // 启动线程
  33. thread1.start();
  34. thread2.start();
  35. // 等待所有线程完成
  36. thread1.join();
  37. thread2.join();
  38. }
  39. }

在这个示例中,两个线程同时对同一个计数器进行操作。由于Java的并发控制是基于锁(synchronized关键字)的,当多个线程试图同一时间获取锁时,就会发生竞态条件。

为了防止这种情况,通常会使用原子操作(Atomic Classes in Java)或者无锁数据结构(Lock-free Data Structures)。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,52人围观)

还没有评论,来说两句吧...

相关阅读