`

多线程的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多线程--等待所有子线程执行完的五种方法.docx

    Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...

    WinForm C#多线程等待窗体

    由于用到了非托管资源,最简单的方式是把托管资源(WaitForm)放在工作线程,线程结束,窗体会自动销毁,不用自己写清理代码。 ShowDialog自动阻塞当前线程,这使它成为最优的解决方式。

    c# Winform 弹出式等待窗口,多线程

    网上有好多使用多线程弹出式等待窗口作为程序中较长时间后台运行提示的,但是做的都不完善,尤其是用 waitThread.Abort() 杀死线程时容易产生异常,进而出错。本程序是比较完善的改进,利用多线程弹出等待窗口,并...

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

    c# 实现多线程的操作,轮询等待回调等异步操作,适合初学者的源码

    Java多线程wait和notify

    开一个子线程来完成一个循环处理的工作,我在主线程中能灵活控制这个子线程的开始、暂停/继续、结束。

    C#多线程等待窗体

    C#开发的基于多线程的等待窗体,winform。

    c_多线程 c_多线程

    c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程c_多线程...

    winform多线程等待窗体

    两种多线程等待窗体,第一种委托加事件实现,另一种等到时间自动关闭

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

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

    C#多线程 C#多线程

    多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程多线程

    【VB.NET】多线程加异步委托实现背景透明的等待窗体(loading界面),超时可以取消操作

    为了给用户提供更好的体验,读取数据库等程序需要长时间来执行的操作,需要弹出一个等待界面。可以一边执行需要等待的操作,一边...本资源使用VS2017软件,VB.NET编程,异步委托和多线程编程实现背景透明的等待窗体。

    C#多线程实现等待窗体

    程序处理比较耗时的操作时,界面经常卡住,给用户一种停止运行的错觉。给出一个等待窗体,能够增加程序的友好性,但是由于主程序在忙于处理数据,所以弹出的窗体最好用另外一个新的线程,来负责显示这个等待窗体。

    浅谈java多线程wait,notify

    主要介绍了java多线程wait,notify,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家一起来学习一下吧

    多线程中的lock,Monitor_Wait和Monitor_Pulse

    多线程中的lock,Monitor_Wait和Monitor_Pulse,几种重要同步方法你一定要知道哦

    java多线程设计wait.docx

    java多线程设计wait.docx

    分批取数 多线程数据处理

    分批取数 多线程数据处理

    多线程以JDBC的方式返回海量数据

    适合多线程,jdbc的方式获取数据

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    C#多线程编程实战 源代码

    如果你没有正确地使用多线程,它会导致难以捉摸的问题,需要你花费大量时间去解决。因此,现代应用程序开发人员必须深入理解多线程。 本书是一本通俗易懂的C#多线程编程指南,通过70多个容易理解的示例,循序渐进地...

    线程池管理多线程上传

    使用线程池管理多线程上传,包含了文件拆分,文件分片多线程上传,单文件上传。多线程执行任务等待管理。拒绝直接new Thread创建新线程导致的诸多问题

Global site tag (gtag.js) - Google Analytics