Java并发编程:线程同步和死锁问题示例

原创 青旅半醒 2024-12-03 12:45 98阅读 0赞

在Java并发编程中,线程同步和死锁是两个重要的概念。下面将通过示例来解释这两点。

  1. 线程同步
    线程同步是为了防止多个线程同时访问或修改共享资源,从而导致数据不一致的问题。

    示例:多线程访问同一数组

    1. class Counter {
    2. int count = 0;
    3. void increment() {
    4. count++;
    5. }
    6. void decrement() {
    7. count--;
    8. }
    9. }
    10. class Worker extends Thread {
    11. Counter counter;
    12. Worker(Counter c) {
    13. this.counter = c;
    14. }
    15. @Override
    16. public void run() {
    17. while (true) {
    18. counter.increment();
    19. try {
    20. // 模拟耗时操作
    21. Thread.sleep(500);
    22. } catch (InterruptedException e) {
    23. e.printStackTrace();
    24. }
    25. counter.decrement();
    26. if (!counter.isCountPositive()) {
    27. break; // 可能出现负数情况,提前退出循环
    28. }
    29. }
    30. }
    31. }
    32. public class Main {
    33. public public static void main(String[] args) {
    34. Counter counter = new Counter();
    35. Worker worker1 = new Worker(counter);
    36. Worker worker2 = new Worker(counter);
    37. // 启动线程
    38. worker1.start();
    39. worker2.start();
    40. // 等待所有线程完成
    41. try {
    42. worker1.join();
    43. worker2.join();
    44. } catch (InterruptedException e) {
    45. e.printStackTrace();
    46. }
    47. }
    48. }
    49. // 线程同步示例,这里我们用Counter类来模拟共享资源
    50. class Counter {
    51. int count = 0;
    52. // 两个方法分别表示增加和减少操作
    53. void increment() {
    54. count++;
    55. }
    56. void decrement() {
    57. count--;
    58. }
    59. }

在这个示例中,我们创建了一个Counter类作为共享资源。两个Worker线程分别对这个资源进行增加和减少的操作。

通过线程同步(如使用synchronized关键字),确保在任何时候只有一个线程可以访问或修改共享资源,从而防止死锁的发生。

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

发表评论

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

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

相关阅读