Java并发问题:线程同步与竞态条件示例
在Java中,线程同步是为了控制多个线程访问共享资源的顺序,防止数据不一致。竞态条件则是指两个或更多的线程在执行过程中,对某个共享资源(变量、对象等)进行操作,由于它们的操作顺序不确定,可能导致结果错误。
下面是一个简单的示例:
public class Counter {
private int count;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
// 示例代码
public class Main {
public static void main(String[] args) {
Counter counter = new Counter();
// 创建线程1和2,分别增加计数
Thread thread1 = new Thread(() -> counter.increment()));
Thread thread2 = new Thread(() -> counter.increment()));
// 启动线程
thread1.start();
thread2.start();
try {
// 线程执行完成后,等待并获取计数结果
thread1.join();
thread2.join();
System.out.println("Count: " + counter.getCount()); // 输出:Count: 2
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在这个示例中,我们创建了一个Counter类,它有一个共享的计数变量。我们使用synchronized关键字对increment和getCount方法进行了同步,确保了在任何时候只有一个线程可以访问这些方法。
在主函数中,我们创建了两个线程来增加计数。当所有线程执行完成后,我们获取并打印出计数结果。
还没有评论,来说两句吧...