• 技术文章 >java >java基础

    java notify()的唤醒

    小妮浅浅小妮浅浅2021-01-08 14:12:04原创2560

    在线程等待的间隙,其他的线程会进行唤醒的操作,这时候我们要用的notify()方法来进行处理。当notify()结束线程的唤醒工作,才会进行下一步的wait方法,也就是说notify()也可以结合wait对线程一起作用。下面我们就notify()的概念、语法、参数、返回值、使用注意,以及结合wait使用的实例带来介绍。

    1.概念

    随机唤醒一个在一样的对象监视器上等待的线程。通知一个在对象上等待的线程,也就是对象wait set中的线程,使其从wait()方法返回,而返回的前提是该线程获取到了对象的锁。

    2.语法

    1

    public final void notify()

    3.参数

    4.返回值

    没有返回值

    5.使用注意

    notify()也必须在同步方法或同步代码块中调用,用来唤醒等待该对象的其他线程。如果有多个线程在等待,随机挑选一个线程唤醒(唤醒哪个线程由JDK版本决定)。notify方法调用后,当前线程不会立刻释放对象锁,要等到当前线程执行完毕后再释放锁。

    6.实例

    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

    注:wait()和notify()应当用在synchronized内

    package com.test;

    import java.util.ArrayList;

    public class ThreadWaitTeste {

    public static void main(String[] args) {

    ArrayList<String> ar = new ArrayList<String>();

    Product p = new Product(ar);

    Consumer c = new Consumer(ar);

    Thread t1 = new Thread(p);

    Thread t2 = new Thread(c);

    t1.start();

    t2.start();

    }

    }

    class Product implements Runnable{

    ArrayList<String>  array;

    public Product(ArrayList<String> array){

    this.array= array;

    }

    public void run() {

    while (true){

         synchronized(array){

    if(this.array.size()<5){

    this.array.add("test!");

    this.array.add("test!");

    this.array.add("test!");

    this.array.add("test!");

    System.out.println("Product size : "+array.size());

    }else{

    System.out.println("Product wait size : "+array.size()+"数量少于5,等待......");

    try {

    array.wait();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

    }

    }

    class Consumer implements Runnable{

    ArrayList<String>  array;

    public Consumer(ArrayList<String> array){

    this.array= array;

    }

    public void run() {

    while(true){

    synchronized(array){

    if(this.array.size()>=5){

    this.array.remove(1);

    System.out.println("Consumer size : "+array.size());

    }else{

    try {

    array.notifyAll();

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

    }

    }

    以上就是java中notify()的唤醒方法,同时结合了wait的使用,完成了线程的等待和唤醒过程。看完基本的notify()知识点后,就可以进行实战的操作了。

    专题推荐:java notify唤醒
    上一篇:java中wait是什么意思 下一篇:java中使用notifyall

    相关文章推荐

    • java线程的状态有哪些• java线程和进程的关系有哪些• 线程在java中的通信• thread类在java线程中的使用• java守护线程应用• java中Thread的停止• java中wait是什么意思

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网