并发控制:Java线程同步问题示例

原创 一时失言乱红尘 2024-10-21 17:21 115阅读 0赞

在Java中,线程同步主要是通过各种锁机制实现的。以下是一些常见的并发控制问题及示例:

  1. 死锁
    当两个或多个线程相互等待对方释放资源时,就会发生死锁。
    示例代码(无限循环导致死锁):

    1. // 线程A
    2. class ThreadA extends Thread {
    3. private Lock lockA = new ReentrantLock();
    4. public void run() {
    5. lockA.lock();
    6. try {
    7. while (true) {
    8. System.out.println("Thread A: Looping...");
    9. }
    10. } finally {
    11. lockA.unlock();
    12. }
    13. }
    14. }
    15. // 线程B
    16. class ThreadB extends Thread {
    17. private Lock lockB = new ReentrantLock();
    18. public void run() {
    19. lockB.lock();
    20. try {
    21. while (true) {
    22. System.out.println("Thread B: Looping...");
    23. }
    24. } finally {
    25. lockB.unlock();
    26. }
    27. }
    28. }
    29. public class Main {
    30. public static void main(String[] args) {
    31. ThreadA threadA = new ThreadA();
    32. ThreadB threadB = new ThreadB();
    33. threadA.start();
    34. threadB.start();
    35. // 等待线程结束
    36. while (!threadA.isFinished() && !threadB.isFinished())) {
    37. try {
    38. // 控制程序的执行,等待线程结束
    39. Thread.sleep(1000); // 模拟长时间操作
    40. } catch (InterruptedException e) {
    41. e.printStackTrace();
    42. }
    43. }
    44. System.out.println("Both threads have finished.");
    45. }
    46. }

    在这个示例中,线程A和线程B都无限循环地执行任务。当程序主线程运行到Thread.sleep(1000);这一行时,会睡眠1秒,模拟长时间操作。

当任意一个线程完成其无限循环后,会释放锁并打印一条信息。主线程此时会从睡眠中唤醒,继续执行后续的逻辑。

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

发表评论

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

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

相关阅读