Java并发编程:线程同步与死锁示例

原创 短命女 2024-09-14 21:45 131阅读 0赞

在Java并发编程中,线程同步和死锁是两个重要的概念。

  1. 线程同步:
    线程同步主要是通过原子操作、synchronized关键字或者Lock接口来实现的。这些机制保证了在同一时刻只有一个线程可以访问共享资源。

  2. 死锁示例:
    死锁是指两个或更多的线程在执行过程中因争夺资源而造成的一种相互等待的现象,若无外力干涉,它们都将无法继续执行下去。

例如,下面的代码片段可能会产生死锁:

  1. class Bank {
  2. Account account1 = new Account();
  3. Account account2 = new Account();
  4. synchronized void depositAccount1(int amount) {
  5. account1.deposit(amount);
  6. System.out.println("Deposit to account 1 done.");
  7. }
  8. synchronized void withdrawAccount2(int amount) {
  9. account2.withdraw(amount);
  10. System.out.println("Withdraw from account 2 done.");
  11. }
  12. }
  13. class Account {
  14. int balance;
  15. public synchronized void deposit(int amount) {
  16. balance += amount;
  17. notifyAll();
  18. }
  19. public synchronized void withdraw(int amount) {
  20. if (balance >= amount) {
  21. balance -= amount;
  22. notifyAll();
  23. } else {
  24. System.out.println("Insufficient balance for withdrawal.");
  25. }
  26. }
  27. }

在这个例子中,两个线程Thread 1Thread 2分别执行存款操作。然而,如果线程A(如Thread 1)在执行withdrawAccount2()之前已经等待了很长时间,而同时线程B(如Thread 2)开始执行depositAccount1()并立即唤醒线程A,那么线程A将会在尝试withdrawAccount2()时发现账户已被其他线程操作,从而进入死锁状态。

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

发表评论

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

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

相关阅读