Wait示例分析

wait方法使"当前线程"进入阻塞(等待)状态.

示例分析:

public class TestWait {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new MyThread("t1");
        synchronized (t){ //main线程持有t对象的锁
            System.err.println(Thread.currentThread().getName() + "... start");
            t.start(); //t被启动后,t执行run里面的方法会阻塞,因为当前线程main持有t对象的锁

            System.err.println(Thread.currentThread().getName() + "... in wait...");
            t.wait(2);//当前main线程进入阻塞(等待)状态,并且线程main释放t的锁,然后main等待notify后重新去竞争t的锁然后继续执行.

            //t对象的锁被释放后,线程t执行run方法的sync会获取到锁然后得到执行,执行完后notify该对象t上面等待的线程main(本例子只有main)
            //主线程main被唤醒,然后重新竞争t对象的锁,得到锁后,继续执行end.
            System.err.println(Thread.currentThread().getName() + "... end");
        }
    }

    static class MyThread  extends Thread {
        public MyThread(String name) {
            super(name);
        }
        @Override
        public void run() {
            synchronized (this){
                for (int i = 0; i < 5; i++) {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.err.println(Thread.currentThread().getName() + "_exec.."+i);
                }

                System.err.println(Thread.currentThread().getName() + "_ notify....");

                notify();//执行完后notify该对象t上面等待的线程,比如主线程
            }
        }
    }
}

原文地址:https://www.cnblogs.com/yangweiqiang/p/9916384.html

时间: 2024-08-12 15:18:37

Wait示例分析的相关文章

Unity Surface Shader 示例分析

对于Unity中的表面着色器(Surface Shader),它的代码整体结构如下所示: Shader "name" { Properties { // 第一部分 } SubShader { // 第二部分 } Fallback "Diffuse" // 第三部分 } 第一部分 Properties 数据块 它的作用是充当数据的接口,将外部的数据(资源)引入进来,以供着色器内部使用.在这里,我们可以定义的数据类型如下所示: (1) _MainTex ( "

三层浅析及示例分析

什么是三层结构?所谓三层结构,不是物理上的三层划分,也不是简单的模块划分,而是逻辑上的三层,是在客户端和数据库访问之间加入了一个中间层,形成逻辑三层结构. 三层都是哪三层?它们的作用是什么?三层结构包含:表示层UI,业务逻辑层BLL,数据访问层DAL.1 显示层,就是软件的显示部分,主要是客户端,通常表现为WEB或窗体.主要功能:接受用户输入信息.显示系统输出信息.为用户提供一个交互界面. 2 业务逻辑层,系统主要功能部分,主要处理软件的业务逻辑,处理数据. 3 数据访问层,用于对数据库的操作,

RPM安装包-Spec文件参数详解与示例分析

spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件. 1.Spec文件参数 spec文件包含建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个目录下.这个文件一般分为如下的几节: (1) Preamle(序言) 序言包含用户请求包的信息时所显示的内容.它可以包含包的功能描述.包的软件版本.版权信息和所属的包组等.Summary 是一行关于该软件包的描述,Name 是该软件包的基名,Version 是该软件的版本号,Release 是 RP

smartjs - DataManager 场景示例分析 - 数据懒加载

发一张policy的参数图设置图: 场景1 - 数据的懒加载/延迟加载 在很多时候,为了提高网页的加载速度,减少不必要的开销,会将页面的数据拆分成几个部分,首先加载呈现可视区域内的数据,然后剩下来的会在需要的时候在进行加载. 而这种按需加载的数据又分为两种: 1.按照需要进行加载:可以是由某个动作触发来引起,比如:tab,查看更多等: 2.采用缓存的方式:对后续动作的预知,提前将后续的数据加载进来,放入到缓存中:等需要的时候能提供快速的响应:比如:很多igrid的滚动分页 那么来看一下在data

ngRx 官方示例分析 - 3. reducers

上一篇:ngRx 官方示例分析 - 2. Action 管理 这里我们讨论 reducer. 如果你注意的化,会看到再不同的 Action 定义文件中,导出的 String Literal Type 名称都是 Actions ,在导入的时候,同时导入同名的类型就是问题了.这里首先使用了 import as 语法进行重命名. import * as book from '../actions/book'; import * as collection from '../actions/collec

Android涂鸦技术及刮刮乐示例分析

概述: 很早之前就想研究一下Android中的涂鸦,其实也说不上是研究了,毕竟都是一些相对比较简单的知识点.下面就对基于画布(Canvas)和触摸事件(onTouchEvent)来实现涂鸦和刮刮乐. 参考: http://blog.csdn.net/lmj623565791/article/details/40162163 此人的博客的确很好,想学习的同学也可以去参考一下这个大牛的其他博客. http://blog.csdn.net/t12x3456/article/details/104329

【Big Data - Hadoop - MapReduce】初学Hadoop之图解MapReduce与WordCount示例分析

Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS)的开源实现. MapReduce是Google MapReduce的开源实现. HDFS和MapReduce实现是完全分离的,并不是没有HDFS就不能MapReduce运算. 本文主要参考了以下三篇博客学习整理而成. 1. Hadoop示例程序WordCount详解及实例 2. hadoop 学习笔

JVM日志示例分析

引言: JVM分析和优化是Java技术体系中的高大上的内容,其实这个东西没有那么神秘和高深,只是大部分童鞋没有机会真正接触它们,从而对它们有一个深入理解.这里通过一个小题目,来展示如何来看JVM输出的日志信息,并得出JVM几个设置变量的设置信息. 1. 题目的提出,请分析最有可能的JVM的参数设置. Heap def new generation   total 6464K, used 115K [0x34e80000,0x35580000, 0x35580000) eden space 576

实验三:klee的执行重现机制(示例分析)

结论性内容: (1)如果是在程序中使用klee_make_symbolic,则可以使用下列脚本进行重现. export LD_LIBRARY_PATH=/home/klee/xiaojiework/klee-xiaojie/build/debug/lib/:$LD_LIBRARY_PATH gcc -L /home/klee/xiaojiework/klee-xiaojie/build/debug/lib/ test4.c -lkleeRuntest KTEST_FILE=klee-last/t