Java多线程同步问题:实例演示

原创 青旅半醒 2024-10-13 21:09 153阅读 0赞

在Java中,多线程的同步主要通过synchronized关键字、wait/notify机制和Lock接口实现。

以下是一个简单的多线程同步问题实例演示:

  1. 使用synchronized关键字

    1. public class Counter {
    2. private int count = 0;
    3. public synchronized void increment() {
    4. count++;
    5. }
    6. public synchronized int getCount() {
    7. return count;
    8. }
    9. }

    在这个例子中,我们创建了一个Counter类,它有一个count变量。我们使用synchronized关键字对increment方法和getCount方法进行了同步。

  2. 使用wait/notify机制

    1. public class WaitNotifyExample {
    2. private final Object lock = new Object();
    3. public void producer() {
    4. while (true) {
    5. synchronized (lock) {
    6. if (count == 10) { // 目标已达到,生产者线程进入等待状态
    7. lock.wait();
    8. break;
    9. } else {
    10. count++;
    11. System.out.println("Producer: " + count);
    12. lock.notifyAll(); // 生产者线程唤醒所有等待它的线程
    13. break;
    14. }
    15. }
    16. }
    17. }
    18. public void consumer() {
    19. while (true) {
    20. try {
    21. Thread.sleep(1000); // 消费者线程每秒执行一次操作
    22. } catch (InterruptedException e) {
    23. e.printStackTrace();
    24. }
    25. synchronized (lock) {
    26. if (count == 10) { // 目标已达到,消费者线程进入等待状态
    27. System.out.println("Consumer: Wait for producer's signal");
    28. lock.wait();
    29. break;
    30. } else {
    31. count--;
    32. System.out.println("Consumer: " + count);
    33. lock.notifyAll(); // 消费者线程唤醒所有等待它的线程
    34. break;
    35. }
    36. }
    37. }
    38. }
    39. public static void main(String[] args) {
    40. WaitNotifyExample example = new WaitNotifyExample();
    41. Thread producerThread = new Thread(example::producer);
    42. Thread consumerThread = new Thread(example::consumer);
    43. producerThread.start(); // 生产者线程启动
    44. consumerThread.start(); // 消费者线程启动
    45. try {
    46. producerThread.join(); // 等待生产者线程完成
    47. consumerThread.join(); // 等待消费者线程完成
    48. } catch (InterruptedException e) {
    49. e.printStackTrace();
    50. }
    51. }
    52. }

    在这个例子中,我们创建了一个Counter类,并通过wait/notify机制实现线程间的同步。当count达到10时,生产者和消费者都会进入等待状态,直到计数器发生变化。

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

发表评论

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

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

相关阅读

    相关 Java线编程:同步问题演示

    在Java多线程编程中,同步问题是常见的挑战。这里我们将通过一个简单的例子来演示同步问题。 **示例:共享资源的多个线程** 假设我们有一个共享变量`count`,初始值为

    相关 Java线同步问题演示

    在Java中,多线程同步是一个重要的概念,它确保了多个线程在访问共享资源时的一致性和线程安全。以下是一些常见的多线程同步问题的演示和解决方案。 ###1.共享资源的竞态条件*