关于JAVA wait()和notify()的问题

问题描述

关于JAVA wait()和notify()的问题
直接调用wait()是调用哪个对象的wait().
JAVA API中 notify()方法的解释是 唤醒在此对象监视器上等待的单个线程。
如果当前没有等待的线程是不是这句代码相当于费的

解决方案

wait()应该是对应线程的,它对释放对像的锁。这样其它线程就可以访问对像。
如果没有等待线程。那么调用notify()肯定什么都不做啊

解决方案二:
千言万语顶不住一段代码:

package com.apkkids.thread;class ThreadA extends Thread {    boolean flag = true;    public void threadExit() {        flag = false;    }    @Override    public void run() {        for (int i = 0; i < 10; i++) {            try {                System.out.println(""ThreadA run "" + i + "" times"");                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }        System.out.println(""ThreadA exit!"");        synchronized (WaitNotifyTest.obj) {            WaitNotifyTest.obj.notify();        }    }}/** * @author wxb * Description:演示Java使用synchronized、wait和notify来实现线程的互相等待与通知 * * 2015-6-27 * 下午9:07:35 */public class WaitNotifyTest {    public static Object obj = new Object();    public static void main(String[] args) {        ThreadA threadA = new ThreadA();        threadA.start();        synchronized (WaitNotifyTest.obj) {            try {                obj.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        System.out.println(""Main Thread exit!"");    }}
时间: 2024-08-18 04:12:58

关于JAVA wait()和notify()的问题的相关文章

Java的wait(), notify()和notifyAll()使用心得(转)

  本篇文章是对java的 wait(),notify(),notifyAll()进行了详细的分析介绍,需要的朋友参考下wait(),notify()和notifyAll()都是java.lang.Object的方法:wait(): Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.notify()

Java的wait(), notify()和notifyAll()使用心得_java

wait(),notify()和notifyAll()都是java.lang.Object的方法:wait(): Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.notify(): Wakes up a single thread that is waiting on this object's

java synchronized wait notify 生产者消费者死锁问题求解

问题描述 //仓库类publicclassWareHouse{//存货物的容器List<String>store=newArrayList<String>();publicWareHouse(){}//存货物的动作publicvoidstock(Stringproduct){synchronized(this){//往仓库中存一个货物System.out.println("卖家已经存入了货物:"+product+",通知等待得购买者");st

java线程 wait notify notifyAll必须在 synchronized中调用

//wait是释放锁,notify是唤醒其他调(用wait等待)的一个线程,不包括自己,notifyAll是唤醒所有线程包括自己 public class Notify implements Runnable {               private String name;                private static Object s=new Object();      private Notify(String name) {              this.na

java并发

1: 并发编程基础 如何减少上下文切换:: 使用无锁并发编程 CAS算法 使用最少线程 使用协程 使用无锁并发编程: 如将数据的ID按照HASH算法取摸分段,不同的线程处理不同的数据.(分段锁) CAS算法: Java的Atomic包使用的CAS算法来更新数据,而不需要加锁. 使用最少线程: 避免创建不需要的线程.比如任务少的时候,但是线程数太多. 使用协程 在单线程里实现多任务调度,并在单线程里维持多个任务的切换. 避免死锁的几个方法:(1)避免一个线程同时获取多个锁.(2)避免一个线程在锁内

java关于线程同步的问题

问题描述 java关于线程同步的问题 package 线程.TestTeread_5; /* push和pop增加减少数组元素, 我的问题是: 为什么去掉push和pop的synchronized修饰关键词时,会报如下错误 异常: Exception in thread "Thread-0" java.lang.IllegalMonitorStateException at java.lang.Object.notify(Native Method) at 线程.TestTeread_

线程间协作的两种方式:wait、notify、notifyAll和Condition

在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态.然后等待消费者消费了商品,然后消费者通知生产者队列有空间了.同样地,当

java-并发-线程间协作的两种方式:wait、notify、notifyAll和Condition

线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态.然后等待消费者消费了商品,然后消费者通知生产者队列有空间了.同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有

详细分析java线程wait和notify_java

wait()和notify()是直接隶属于Object类,也就是说,所有对象都拥有这一对方法.初看起来这十分 不可思议,但是实际上却是很自然的,因为这一对方法阻塞时要释放占用的锁,而锁是任何对象都具有的,调用任意对象的 wait() 方法导致线程阻塞,并且该对象上的锁被释放.而调用任意对象的notify()方法则导致因调用该对象的wait() 方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行). 其次,wait()和notify()可在任何位置调用,但是这一对方法却必须在