`

线程学习一,wait和notify实现简单的同步

阅读更多
/*
* 实现一个简单的wait-notify的线程同步问题
*/

package threadTest;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Administrator
*/
public class NotifyWait {

/**
* 内部类,
当使用Runnable接口模式时,必须用Thread th = new Thread(Runnable target);来获得start方法
如果直接调用Run方法,
这只是调用一个方法而已,
程序中依然只有主线程--这一个线程,
其程序执行路径还是只有一条
*/

   static class Student implements Runnable{
        public void run(){
         synchronized(this){
            System.out.println("run in notifyWait");
            notify();
        }
    }
    }
    public static void main(String[] args) throws InterruptedException {
        Student stu = new Student();
        Thread th = new Thread(stu);
        System.out.println("-----start main----");
        th.start();//不用直接调用run();因为那样还是只有main一个线程
        synchronized(stu){//确定要同步的线程对像
            System.out.println("--main--");
            try {
                stu.wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(NotifyWait.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println("--end of main---");
        }
    }
}
分享到:
评论
1 楼 hareamao 2010-07-27  
if the th thread finishes before stu.wait() is excuted, the main thread will hang. 

相关推荐

    Java 同步方式 wait和notify/notifyall

    在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...

    Java多线程wait和notify

    下面是一个简单的例子,展示了如何通过 `wait()` 和 `notify()` 控制子线程的执行: ```java public class ThreadControl { private boolean running = false; private Object monitor = new Object(); public ...

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

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

    Java 同步锁 wait notify 学习心得

    Java的`wait`和`notify`方法是实现线程间同步和通信的关键工具。正确使用这些方法可以有效避免线程间的死锁和资源浪费,同时保证多线程程序的正确性和性能。然而,使用这些方法时也需谨慎,不当的使用可能导致线程...

    一个理解wait()与notify()的例子

    本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...

    主线程去控制子线程wait与notify

    在Java多线程编程中,`wait()`和`notify()`是两个非常重要的方法,它们用于线程间的协作和通信。这两个方法是Java语言中的Object类提供的,因此所有的对象都可以使用。在本文中,我们将深入探讨如何使用主线程来控制...

    wait,notify等线程知识.pdf

    Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...

    wait_notify_demo

    `wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...

    Java多线程同步(wait()notify()notifyAll())[文].pdf

    总之,Java多线程同步通过wait()、notify()和notifyAll()等方法,配合synchronized关键字,实现了对共享资源的访问控制,保证了程序的正确性。同时,原子操作和volatile关键字提供了更细粒度的线程安全保证。理解并...

    浅谈java多线程wait,notify

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

    Java多线程通讯之wait,notify的区别详解

    其中,wait和notify是两个非常重要的方法,用于控制线程的状态和同步。 wait方法: wait方法是Object类中的方法,用于使当前线程等待某个对象的控制权。当一个线程调用wait方法时,它将释放对该对象的控制权,并将...

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

    本文将深入探讨`wait()`, `notify()`以及它们与`sleep()`方法的区别,这些都是Java中与线程同步密切相关的概念。 首先,`wait()`, `notify()`和`notifyAll()`是Object类中的方法,它们主要用于线程间通信和协作。...

    java中几个notify、wait使用实例

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

    Java的sychronized、wait和notify范例

    `synchronized`关键字、`wait()`和`notify()`方法是Java多线程中用于控制并发访问共享资源的重要工具,它们是Java内存模型(JMM)的一部分,主要用于解决线程间的同步问题。 一、`synchronized`关键字 `...

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

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

    简单实现多线程同步示例(模拟购票系统)

    为了实现线程同步,Java提供了多种机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口(如ReentrantLock)等。在这个示例中,我们可能会用到synchronized关键字来修饰购票的方法,这样...

    java-wait和notify的用法.pdf

    总结一下,`wait()`和`notify()`是Java多线程编程中实现线程间同步和通信的关键工具。`wait()`让线程暂停并释放锁,等待其他线程的通知;`notify()`则用来唤醒一个在对象上等待的线程。在实际编程中,需要正确地使用...

    浅谈线程通信wait,notify作用

    print()方法中使用synchronized关键字来实现同步,使用wait()和notify()方法来实现线程之间的通信。 在print()方法中,我们使用while循环来实现打印10个数。当i小于10时,打印当前线程的名称和数字,然后执行notify...

    JAVA实现线程间同步与互斥生产者消费者问题

    在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...

Global site tag (gtag.js) - Google Analytics