java notify 唤醒_java notify()的唤醒

2Q==

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

1.概念

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

2.语法public final void notify()

3.参数

4.返回值

没有返回值

5.使用注意

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

6.实例注:wait()和notify()应当用在synchronized内

package com.test;

import java.util.ArrayList;

public class ThreadWaitTeste {

public static void main(String[] args) {

ArrayList ar = new ArrayList();

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  array;

public Product(ArrayList 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  array;

public Consumer(ArrayList 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()知识点后,就可以进行实战的操作了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值