理解和解决Java多线程同步问题示例

原创 桃扇骨 2024-09-25 15:24 160阅读 0赞

Java中的多线程同步问题是当多个线程共享资源时,如何保证这些线程在访问资源时不会出现数据冲突或异常结果。

以下是一个简单的示例,演示了使用synchronized关键字来同步两个共享变量的读写操作:

  1. public class SharedVariables {
  2. private int count = 0;
  3. private int lock = 1; // 使用锁作为同步标志
  4. public synchronized void increment() {
  5. while (lock == 1) { // 确保锁未被其他线程占用
  6. try:
  7. wait(); // 让当前线程等待锁的释放
  8. catch (InterruptedException e) {
  9. Thread.currentThread().interrupt();
  10. e.printStackTrace();
  11. }
  12. }
  13. count++; // 更新count值
  14. lock = 0; // 设置锁为0,表示可以被其他线程获取
  15. notifyAll(); // 向所有等待锁的线程发出通知
  16. }
  17. public synchronized int getCount() {
  18. while (lock == 1) { // 确保锁未被其他线程占用
  19. try:
  20. wait(); // 让当前线程等待锁的释放
  21. catch (InterruptedException e) {
  22. Thread.currentThread().interrupt();
  23. e.printStackTrace();
  24. }
  25. }
  26. return count; // 返回当前count值,但已经锁定,不能直接修改
  27. }
  28. }

在这个示例中,我们有两个共享变量countlock。每个线程在访问这两个变量时,都需要先获得锁(即执行synchronized关键字后面的代码块)。这样可以确保任何时候只有一个线程能修改共享资源,从而避免了同步问题。

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

发表评论

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

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

相关阅读