Java并发问题:线程同步与竞态条件示例

原创 左手的ㄟ右手 2024-12-13 23:39 85阅读 0赞

在Java中,线程同步是为了控制多个线程访问共享资源的顺序,防止数据不一致。竞态条件则是指两个或更多的线程在执行过程中,对某个共享资源(变量、对象等)进行操作,由于它们的操作顺序不确定,可能导致结果错误。

下面是一个简单的示例:

  1. public class Counter {
  2. private int count;
  3. public synchronized void increment() {
  4. count++;
  5. }
  6. public synchronized int getCount() {
  7. return count;
  8. }
  9. }
  10. // 示例代码
  11. public class Main {
  12. public static void main(String[] args) {
  13. Counter counter = new Counter();
  14. // 创建线程1和2,分别增加计数
  15. Thread thread1 = new Thread(() -> counter.increment()));
  16. Thread thread2 = new Thread(() -> counter.increment()));
  17. // 启动线程
  18. thread1.start();
  19. thread2.start();
  20. try {
  21. // 线程执行完成后,等待并获取计数结果
  22. thread1.join();
  23. thread2.join();
  24. System.out.println("Count: " + counter.getCount()); // 输出:Count: 2
  25. } catch (InterruptedException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }

在这个示例中,我们创建了一个Counter类,它有一个共享的计数变量。我们使用synchronized关键字对increment和getCount方法进行了同步,确保了在任何时候只有一个线程可以访问这些方法。

在主函数中,我们创建了两个线程来增加计数。当所有线程执行完成后,我们获取并打印出计数结果。

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

发表评论

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

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

相关阅读