wait()与notify():

 1 public class ThreadComDemo {
2 public static void main(String[] args) {
3 try {
4 SyncOb sObj= new SyncOb();
5
6 new MyThread("MyThread", sObj);
7
8 for (int i = 0; i < 10; i++) {
9 Thread.sleep(250);
10 System.out.print(".");
11 }
12 System.out.println();
13
14 sObj.goAhead();
15 } catch (InterruptedException e) {
16 System.out.println("Main thread interrupted.");
17 }
18 }
19 }
20
21
22 class MyThread implements Runnable {
23 SyncOb syncOb;
24
25 public MyThread( String name, SyncOb so) {
26 syncOb = so;
27 new Thread(this, name).start();
28 }
29
30 @Override
31 public void run() {
32 syncOb.waitFor();\\线程睡眠
33 }
34 }
35
36 class SyncOb {
37 boolean ready = false;
38 synchronized void waitFor() {
39 String thrdName = Thread.currentThread().getName();
40 System.out.println(thrdName + " is entering waitFor().");
41
42 System.out.println(thrdName + " calling wait() to wait for " + "notification to proceed.\n");
43
44 //调用wait()方法,这会使线程睡眠,并且会释放该对象的监视器。这样就允许另一个线程使用对象。
45 //在另一个线程进去同一个监视器并调用notify()之后,睡眠的线程会被唤醒。
46 try {
47 while(!ready) wait();//此处用的是while循环,而不是if.防止假唤醒。
48 } catch (InterruptedException e) {
49 System.out.println("Interrupted");
50 }
51 System.out.println(thrdName + " received notification and is" + " resuming execution.");
52 }
53
54 synchronized void goAhead() {
55 String thrdName = Thread.currentThread().getName();
56 System.out.println("\n" + thrdName + " thread calling notify() inside goAhead().\n" +
57 "This will let MyThread resume execution.\n");
58 ready = true;
59 notify();
60 }
61
62 }

多线程编程<二>的更多相关文章

  1. [置顶] 曙光到来,我的新书《Android进阶之光》已出版

    独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...

  2. 《Android进阶之光》--注解与依赖注入框架

    No1: 标准注解: 1)@Override:覆写 2)@Deprecated:过时 3)@SuppressWarnings:取消警告 4)@SafeVarargs:申明使用了可变长度参数的方法 No ...

  3. 《Android进阶之光》--Material Design

    接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...

  4. Android中的多线程编程(一)附源代码

    Android中多线程编程:Handler类.Runnable类.Thread类之概念分析 1.Handler类: Handler是谷歌封装的一种机制:能够用来更新UI以及消息的发送和处理.Handl ...

  5. 《Android进阶之光》--多线程编程

    No1: 实现多线程的3中方法 1)继承Thread,重写run()方法 2)实现Runnable接口,并实现该接口的run()方法 3)实现Callable接口,重写call()方法 public ...

  6. 《Android进阶之光》--网络编程与网络框架

    No1: Volley源码分析: Volley.newRequestQueue-> RequestQueue.start()-> CacheDispatcher.start()->C ...

  7. Android进阶(九)APP编程感想

    从初识Android到现在,在不断做APP(二维码.条形码扫描,彩票购买,火车票余票查询)的过程中,自己学会了很多东西.找时间整理了一下,总结如下: 其中,对于前两个APP,自己都是在他人已完成的基础 ...

  8. Android中的多线程编程

    问题 Android的UI也是线程不安全的,如果要更新应用程序里的UI元素,必须在主线程中进行,否则就会抛异常.比如用一个Button的onClick函数去更新界面上的元素,就会得到一个CalledF ...

  9. 《Android进阶之光》--Android新特性

    Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...

  10. Android进阶之光-第1章-Android新特性-读书笔记

    第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...

随机推荐

  1. Unittest方法 -- 用例执行顺序

    import unittestfrom selenium import webdriverclass F4(unittest.TestCase): @classmethod def setUpClas ...

  2. 网络损伤仪WANsim的队列深度功能

    什么是队列深度 在网络损伤仪WANsim中,队列是指一个用于缓存报文的缓冲池.深度是指缓冲池可以存储的最大数据量.当WANsim接受的报文超出了带宽限制的量时,溢出的报文会进入队列中. 我们可以在WA ...

  3. js中的 true 与 false

    可判断为 false 的情况: 0,-0,NaN,undedined,"",false,null,缺省的值 可判断为 true 的情况: 除false的其他情况均可,包括负数.&q ...

  4. spring IOC体系图

  5. thinkPHP5 5.0.23 远程代码执行漏洞

    修改数据包 POST /index.php?s=captcha HTTP/1.1 Host: 192.168.49.2:8080 User-Agent: Mozilla/5.0 (Macintosh; ...

  6. 比@EnableMongoAuditing功能强大的实现

    问题出现 以前通过@EnableMongoAuditing.@CreateDate.@LastModifiedDate进行实体类创建时间.修改时间的自动管理. 但为了实现多数据源的管理以及切换,自己覆 ...

  7. C# Get和Post请求接口类

    public class HttpHelper {/// <summary> /// Get请求 /// </summary> /// <param name=" ...

  8. 手写Pascal解释器(二)

    目录 一.part4 补充理论知识 二.part5 设计生成式 三.part6 一.part4 承接上次的内容,我们继续编写part4,这个部分我们的任务是完成输入一个仅带乘除运算符的表达式,然后返回 ...

  9. Spring Cloud 专题之六:bus

    书接上回: SpringCloud专题之一:Eureka Spring Cloud专题之二:OpenFeign Spring Cloud专题之三:Hystrix Spring Cloud 专题之四:Z ...

  10. 为什么大部分的Android开发成为不了架构师

    小团队一般 10 人左右,其中常常是技术最牛的人做架构师(或TL).所以,架构师在广大码农中的占比大概平均不到 10%.而架构师也可以分为初级.中级.高级三档,江湖上真正高水平的软件架构师就更少了. ...