`

多线程-notify和wait

 
阅读更多

wait() 无限制等待下去   wait(1000) 等待1s

b.wait();的意思是临时释放锁,并阻塞当前线程 直到notify 或(notifyAll )

notify()所在的同步块运行完之后,wait所在的线程就可以继续执行.

 

notify() 和 wait() 需要在 synchronized 之中

 

package test;

class Ticker extends Thread {
        int tickets=50;
   public static void main(String[] args) {
         System.out.println(Thread.currentThread().getName() + " 线程运行开始!");
         Ticker test = new Ticker();
         Thread thread1 = new Thread(test);
         Thread thread2 = new Thread(test);
         thread1.start();
         thread2.start();
         System.out.println(Thread.currentThread().getName() + " 线程运行结束!");
     }
 
     public void run() {
         System.out.println(Thread.currentThread().getName() + " 线程运行开始!");
         while(tickets>0){
              output();
           }
         System.out.println(Thread.currentThread().getName() + " 线程运行结束!");
     }
    
     public synchronized void output(){
      //待注销开始 如果注销这段 结果会变化
      notify();
         try {
                wait();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //待注销结束
      System.out.println(tickets + " " + Thread.currentThread().getName());
      tickets--;
     }
}

 

结果如下:

main 线程运行开始!
main 线程运行结束!
Thread-1 线程运行开始!
Thread-2 线程运行开始!
50 Thread-1
49 Thread-2
48 Thread-1
47 Thread-2
46 Thread-1
45 Thread-2

如果把 待注销开始和待注销结束之间的代码注销后可能出现结果如图:

main 线程运行开始!
main 线程运行结束!
Thread-2 线程运行开始!
50 Thread-2
49 Thread-2
Thread-1 线程运行开始!
48 Thread-2
47 Thread-1

 

解释:1线程运行后到wait 一直到2线程notify后然后wait后 1线程继续运行,

           1线程继续运行到notify然后wait  此时通知2线程 运行, 所以没有注销代码的时候会1、2线程交替运行。

这里只有两个线程,所以不用指定对象名后再notify

分享到:
评论

相关推荐

    42.线程间的通信-wait与notify-wait(long)的使用.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java多线程wait和notify

    总结来说,Java的 `wait()` 和 `notify()` 提供了一种在多线程环境中控制线程执行的机制。通过合理使用这些方法,我们可以实现线程间的协作,精确控制子线程的运行状态。然而,这种方式虽然灵活,但管理起来相对复杂...

    多线程-day01.docx

    线程通信是指线程间的数据交换,Java 提供了多种机制,如 wait()、notify() 和 notifyAll() 方法,以及 `java.util.concurrent` 包下的 `BlockingQueue` 和 `Phaser` 等高级工具,用于协调线程间的操作顺序和数据...

    day24-多线程-设计模式.7z

    在探索多线程和设计模式的同时,还要关注线程间的通信(如使用`wait()`、`notify()`、`notifyAll()`等)、同步机制(如`synchronized`关键字、`Lock`接口等)、线程池的使用(`ExecutorService`、`...

    41.线程间的通信-wait与notify-只唤醒一个线程或所有线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    java 多线程-线程通信实例讲解

    线程通信是多线程编程中一个关键的组成部分,它确保线程间能有效地协同工作,避免竞争条件和死锁等问题。在Java中,线程通信主要依赖于共享内存和内置的等待/通知机制。 首先,线程通过共享对象通信是一种常见的...

    源码—Java多线程5—死锁和wait notify notifyAll

    源码—Java多线程5—死锁和wait notify notifyAll

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    浅谈java多线程wait,notify

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

    39.线程间的通信-wait与notify-wait方法自动释放锁与notify方法不会释放锁.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java多线程-线程间的通信

    ### Java多线程—线程间的通信 #### 一、线程间的通信 ##### (1)为什么要处理线程间的通信? 在多线程环境中,不同的线程可能需要协同工作来完成一项任务。例如,一个线程负责生产数据,另一个线程负责消费这些...

    多线程同步和通讯完整示例

    本文将深入探讨这些概念,以及如何使用synchronized关键字、wait-notify机制和Lock接口来实现线程间的同步与通讯。 首先,多线程是指在一个程序中同时运行多个独立的执行线程,每个线程都有自己的程序计数器、系统...

    深入理解Wait、Notify和Wait与sleep区别

    在Java编程语言中,多线程是...总之,理解和熟练掌握`wait()`, `notify()`以及`sleep()`的使用对于编写高效的多线程程序至关重要。在设计并发程序时,应根据需求选择合适的方法,确保线程间的协同工作和程序的正确性。

    Java的多线程-线程间的通信.doc

    在实际开发中,正确使用这些线程通信机制可以避免数据不一致、死锁等问题,确保多线程程序的正确性和效率。例如,在生产者-消费者模型或读者-写者问题中,线程间的通信是解决并发问题的关键。因此,理解并熟练掌握...

    性能之多线程-演示Demo

    例如,使用`join()`方法可以让主线程等待某个子线程结束,或者使用`wait()`和`notify()`(Java)或`Condition`(Python)进行线程间的同步。 性能优化是多线程应用的关键,其中线程池是一种常见策略。线程池可以...

    java中几个notify、wait使用实例

    在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...

    Java多线程-生产者与消费者问题

    ### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...

    java之wait,notify的用法([ 详解+实例 ])

    在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...

    38.线程间的通信-wait与notify-wait与notifty机制的实现.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

Global site tag (gtag.js) - Google Analytics