多线程同步问题:Java示例?

原创 梦里梦外; 2024-11-13 23:48 196阅读 0赞

在Java中,多线程同步是一个常见的问题,因为多个线程可能会同时访问共享资源,导致数据不一致或竞态条件。Java提供了多种机制来同步线程,包括synchronized关键字、Lock接口、volatile关键字等。下面是一个使用synchronized关键字来解决多线程同步问题的简单示例:

```javapublic class Counter {
private int count =0;

// 使用synchronized关键字同步方法 public synchronized void increment() {
count++;
}

public synchronized int getCount() {
return count;
}

public static void main(String[] args) {
final Counter counter = new Counter();

// 创建线程Thread thread1 = new Thread(() -> {
for (int i =0; i <1000; i++) {
counter.increment();
}
});

Thread thread2 = new Thread(() -> {
for (int i =0; i <1000; i++) {
counter.increment();
}
});

//启动线程 thread1.start();
thread2.start();

try {
//等待线程完成 thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}

//打印最终计数 System.out.println(“Final count is: “ + counter.getCount());
}
}
``在这个示例中,Counter类有一个count成员变量,increment方法用于增加计数器的值。我们使用synchronized关键字来同步incrementgetCount方法,确保在任何时候只有一个线程可以执行这些方法,从而避免了多线程同时修改count`变量的问题。

main方法启动两个线程时,它们都会尝试增加count的值。由于increment方法是同步的,所以两个线程会轮流执行increment方法,最终count的值将是2000(每个线程增加1000次)。

这个示例展示了如何使用synchronized关键字来解决多线程同步问题。在实际应用中,你可能需要根据具体需求选择不同的同步机制。

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

发表评论

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

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

相关阅读