`

线程学习一,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 学习心得

    java多线程下wait和notify的作用

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

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

    Java的sychronized、wait和notify范例

    Java多线程的样例代码,工程,内含wait()、notify()和sychronized的使用范例。

    线程学习小Test

    Java线程 wait notify sleep join 同步实现Demo

    等待机制与锁机制wait notify

    一个简单的线程同步机制,也能实例了解wait notify的使用,notify与notifyAll的区别

    java 多线程设计模式 进程详解

    wait()、notify()和notifyAll() wait()和sleep() 线程中断 静态方法(有关同步的细节) 总结 第五章 Java线程编程的例子 数据结构和容器 简单的同步例子 一个网络服务器类 AsyncInputStream类 使用TCP...

    python 多线程的同步机制 以python2例程的方式讲解了python 多线程的同步 常用的方法,主要是锁、条件同步、队列

     首先一个线程成功获得一个条件变量后,调用此条件变量的wait()方法会导致这个线程释放这个锁,并进入“blocked”状态,直到另一个线程调用同一个条件变量的notify()方法来唤醒那个进入“blocked”状态的线程。...

    java并发编程:线程基础

    本资源致力于向您介绍 Java 并发编程中的线程基础,涵盖了多线程编程的核心概念、线程...线程间通信: 详解线程间通信的方法,包括 wait、notify 和 notifyAll 方法的使用。讲解如何通过这些方法实现线程的协作和同步。

    java多线程设计模式

    java多线程设计模式 线程的创建和重起 线程的同步 wait/notify/sleep机制 Worker Pattern

    java编程 ---线程

    0、相关概念理解 1、线程的组成以及线程的创建、启动和调度 2、线程的基本控制 3、选择创建线程的方法 4、使用Java技术中的 synchronized 关键字 5、线程交互 —wait 与 notify 6、线程同步

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 ...9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 9.9 计时器线程Timer 9.10 线程联合 9.11 守护线程

    Java-线程状态和等待唤醒机制和线程池

    1.概念 线程一共有6中状态,相互之间... 顾客和老板线程必须使用同步代码块包裹起来,保证等待和唤醒只能有一个在执行 同步使用的锁对象必须保证唯一 只有锁对象才能调用wait和notify方法 Obejct类中的方法 void wait

    java中的并发和多线程编程中文版

    读者将通过使用java.lang.thread类、synchronized和volatile关键字,以及wait、notify和notifyall方法,学习如何初始化、控制和协调并发操作。此外,本书还提供了有关并发编程的全方位的详细内容,例如限制和同步、...

    JAVA多线程实现2个producer和一个Consumer把整数放入到一个环形缓冲Circle Buffer中

    采用同步机制synchronized/wait(notify)或者lock(unlock)/condition variable实现两个producer和一个consumer之间协调运行。运行结果输出格式为:Put(or Get) number {[content] length start_index end_index} 包含...

    java面试题(线程和JSP及EJB部分).pdf

    线程编程与EJB方面 1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是...若标志指出线程应当恢复,则用一个notify()重新启动线程。

    java中的Lock类和Condition类.docx

    之前已经说道,JVM提供了synchronized关键字来实现对变量的同步访问以及用wait和notify来实现线程间通信。在jdk1.5以后,JAVA提供了Lock类来实现和synchronized一样的功能,并且还提供了Condition来显示线程间通信。...

    java笔试题大集合及答案(另附各大公司笔试题)

    60、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口 用synchronized关键字修饰同步方法 反对使用...

    Python多线程编程(七):使用Condition实现复杂同步

    目前我们已经会使用Lock去对公共资源进行互斥访问了,也探讨了同一线程可以使用RLock去重入锁,但是尽管如此我们只不过才处理了一些程序中简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题。...

    Java中的Runnable接口最全讲义

    7.1 使用wait()和notify()方法 7.2 使用Lock和Condition 8. 线程池: 8.1 线程池的概述 8.2 使用Executor框架创建线程池 8.3 线程池的优势和适用场景 9. 线程中断: 9.1 如何中断线程 9.2 处理中断请求 10. 线程状态...

    锁、生产者与消费者.pdf

    注意:上述方法只能被同步监听锁对象来调用,这也是为啥wait() 和 notify()方法都在 Object 对象中,因为同步监听锁可以是任意对象,只不过必须是需要同步线程的共同对象即可,否则别的对象调用会报错:  java.lang...

Global site tag (gtag.js) - Google Analytics