`

多线程的Wait返回它等待的下方

阅读更多
  1. 多线程的Wait返回它等待的下方。
     Java Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    package org.vocano.java.tst;
    class ThreadDemo {
        public static void main(String[] args) {
            Buffer buf = new Buffer();
            new Producer(buf).start();
            new Consumer(buf).start();
            new Consumer(buf).start();
        }
    }
    class Producer extends Thread {
        private Buffer buf;
        public Producer(Buffer buf) {
            this.buf = buf;
        }
        public void run() {
            boolean odd = false;
            while(true) {
                synchronized(buf) {
                    System.out.println("Producer get lock!");
                    if(buf.bFull) {
                        System.out.println("Producer wait!!!");
                        try{buf.wait();}catch(Exception e) {}
                        System.out.println("Producer wait return return return !!!!!!! ");
                    }
                    if(odd) {
                        buf.name="jack";    
                        try{Thread.sleep(100);}catch(Exception e) {}
                        buf.sex="female";
                    } else {
                        buf.name="lucy";    
                        try{Thread.sleep(100);}catch(Exception e) {}
                        buf.sex="male";
                    }
                    buf.bFull = true;
                    buf.notify();
                    System.out.println("Producer release lock!");
                }
                odd = !odd;
            }
        }
    }
    class Consumer extends Thread {
        private Buffer buf;
        public Consumer(Buffer buf) {
            this.buf = buf;
        }
        public void run() {
            while(true) {
                synchronized(buf) {
                    System.out.println("Consumer get lock!");
                    if(!buf.bFull) {
                        System.out.println("Consumer wait!!!");
                        try{buf.wait();}catch(Exception e) {}
                        System.out.println("Consumer wait return return return !!!!!!! ");
                    }
                    try{Thread.sleep(500);}catch(Exception e) {}
                    System.out.println(buf.name + " : " + buf.sex);
                    buf.bFull = false;
                    buf.notify();
                    System.out.println("Consumer release lock!");
                }
            }
        }
    }
    class Buffer {
        boolean bFull = false;
        String name = "Unkown";
        String sex = "Unkown";
    }
  2. 输出:可看出Wait的返回时另一个的wait或者release,不是自己getLock,说明notify放回wait的点。
     Java Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Producer get lock!
    Producer release lock!
    Consumer get lock!
    lucy : male
    Consumer release lock!
    Consumer get lock!
    Consumer wait!!!
    Producer get lock!
    Producer release lock!
    Producer get lock!
    Producer wait!!!
    Consumer wait return return return !!!!!!! 
    jack : female
    Consumer release lock!
    Producer wait return return return !!!!!!! 
    Producer release lock!
    Producer get lock!
    Producer wait!!!
    Consumer get lock!

     

分享到:
评论

相关推荐

    Java多线程wait和notify

    `wait()` 方法会让当前持有锁的线程进入等待状态,释放锁,直到其他线程调用 `notify()` 或 `notifyAll()` 唤醒它。`notify()` 则会随机选择一个等待在该对象监视器上的线程并唤醒它,而 `notifyAll()` 则会唤醒所有...

    WinForm C#多线程等待窗体

    在标题“WinForm C#多线程等待窗体”中,我们探讨的关键点是如何在进行耗时操作时创建一个等待窗体,让用户知道程序正在执行任务,并且不允许用户进行其他操作,直到任务完成。描述提到了“非托管资源”和...

    多线程通信和等待机制.docx

    notify()方法的作用是通知那些可能等待该对象的对象锁的其他线程,如果有多个线程等待,则由线程规划器随机挑选出其中一个呈wait状态的线程,对其发出通知notify,并使它等待获取该对象的对象锁。需要说明的是,在...

    c# 多线程(轮询,等待,回调)操作实例

    在C#编程中,多线程技术是一种关键的并发处理方式,它允许程序同时执行多个任务,提升系统效率。在本实例中,我们将探讨如何利用C#实现多线程,特别是涉及轮询、等待和回调的异步操作,这对于理解和应用多线程编程至...

    浅谈java多线程wait,notify

    _java多线程wait、notify机制详解_ 在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地...

    C#多线程实现等待窗体

    为了解决这个问题,我们可以利用多线程来实现等待窗体。 等待窗体(WaitForm)通常用于在后台线程执行长时间任务时向用户提供反馈,告知他们程序仍在运行并未崩溃。这种窗体通常包含进度条、文本信息或其他指示器,...

    C#多线程等待窗体

    在C#编程中,多线程技术是一种常用的方法,它能让我们在单个应用程序中同时执行多个任务,提高程序的效率和响应性。"等待窗体"是多线程应用中一个重要的概念,通常用于在后台任务执行时提供用户友好的界面反馈。本...

    java多线程设计wait[参考].pdf

    1. `wait()`:调用此方法的线程会释放它持有的对象锁,进入等待池,并等待其他线程唤醒。线程在调用`wait()`后会暂停执行,直到其他线程调用同一对象的`notify()`或`notifyAll()`方法。当`wait()`返回时,线程需要...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    多线程系列相关的技术要点

    5. Java多线程学习(四)等待/通知(wait/notify)机制 6. Java多线程学习(五)线程间通信知识点补充 7. Java多线程学习(六)Lock锁的使用 8. Java多线程学习(七)并发编程中一些问题 9. Java多线程学习(八...

    多线程面试59题(含答案).pdf

    涵盖了多线程的基本概念、优点、线程和进程的区别、Java 实现多线程的方式、启动线程方法的区别、终止线程的方式、线程的生命周期、wait()和 sleep()方法的区别、多线程同步的方法、死锁的定义和避免方法、多线程...

    多线程sleep,yield,wait区别

    - 当线程调用一个对象的 `wait()` 方法时,它会释放对象的锁,进入等待状态,直到其他线程调用同一对象的 `notify()` 或 `notifyAll()`。 - `wait()` 会抛出 `InterruptedException`,与 `sleep()` 类似,需要妥善...

    java多线程经典案例

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...

    C++ 等待线程结束

    当一个程序包含多个执行路径,即线程,有时我们需要确保某个线程执行完毕后再进行下一步操作,这就涉及到“等待线程结束”的功能。本篇文章将详细探讨如何在C++中实现这一功能。 首先,C++11引入了对线程支持的标准...

    12.1 Qt5多线程:多线程及简单实例

    Qt5框架提供了一种方便的方式来实现多线程,它允许开发者在不同的线程中执行任务,从而避免主线程(GUI线程)因处理耗时操作而变得卡顿。本知识点将深入探讨Qt5中的多线程以及一个简单的实例——WorkThread。 **1. ...

    .NET多线程实例

    .NET框架的多线程技术是开发高性能应用程序的关键组成部分,特别是在处理并发操作、并行计算以及UI更新时。在.NET 2.0版本中,多线程功能已经得到了充分的优化和增强,允许开发者构建出更加高效的应用程序。下面将...

    易语言线程返回数据的方法源码

    主线程通过`等待线程结束`和`获取线程变量`来接收线程返回的数据。 然而,线程间的通信需要考虑同步问题,防止数据竞争。在易语言中,可以使用“锁定资源”和“解锁资源”来确保同一时间只有一个线程访问特定的数据...

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    C# 多线程实例多线程实例多线程实例

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...

Global site tag (gtag.js) - Google Analytics