文档章节

两个线程之间的轮流等待和唤醒

602400919
 602400919
发布于 2016/08/08 14:15
字数 216
阅读 4
收藏 0
点赞 0
评论 0

package test;

/**
 * 两个线程轮流等待和唤醒.
 * @author 60240919@qq.com
 *
 */
public class WaitNotifyTest {
    static Object mo = new Object();
    static boolean wflag = false;

    static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(){
        protected Integer initialValue() {
            return 0;
        }
    };
    
    public static void main(String[] args) {
        new WaitThread().start();
        new NotyfyThread().start();
    }
    
    static class WaitThread extends Thread {
        @Override
        public void run() {
            while(true) {
                synchronized (mo) {
                    try {
                        if(!wflag) {
                            threadLocal.set(threadLocal.get()+1);
                            System.out.println("第几次等待: "+threadLocal.get());
                            wflag = true;
                            mo.wait();
                        }
                    } catch (InterruptedException e) {
                        System.out.println("main exception!");
                    }
                }
            }
            
        }
    }
    
    static class NotyfyThread extends Thread {
        @Override
        public void run() {
            while(true) {
                synchronized (mo) {
                    if(wflag) {
                        threadLocal.set(threadLocal.get()+1);
                        System.out.println("第几次唤醒: "+threadLocal.get());
                        mo.notify();
                        wflag = false;
                    }
                }
                try {
                    Thread.sleep(2000L);
                } catch (InterruptedException e) {
                    System.out.println("NotyfyThread exception!");
                }
            }
        }
    }

}
 

********************************************程序运行结果********************************************************

......

第几次唤醒: 74
第几次等待: 75
第几次唤醒: 75
第几次等待: 76
第几次唤醒: 76
第几次等待: 77
第几次唤醒: 77
第几次等待: 78
第几次唤醒: 78
第几次等待: 79
第几次唤醒: 79
第几次等待: 80

......

© 著作权归作者所有

共有 人打赏支持
602400919
粉丝 0
博文 4
码字总数 2002
作品 0
深圳
高级程序员
线程条件队列ConditionObject源码解读

小记 好久没更博,窗外光芒万丈,冬日的晚晨,多么美好,就不浪费了,循着键盘上的点点星辰,开工! 啥子是条件队列? 我们都知道,在万类之祖Object里面定义了几个监视器方法:wait(),not...

rickiyeat ⋅ 2017/11/26 ⋅ 0

线程池(领导者-追随者,生产者-消费者等)小结

领导者/追随者模型(Leader/Followers) 这几天翻了些文章,发现对领导者/追随者模型说的比较少,下面就这个模型打个比方: 话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。...

长平狐 ⋅ 2013/01/06 ⋅ 0

wait() notify() notifyAll()小结

1.wait()和notify()是如何工作的? 这两个方法不并在Thread类中,而是在Object类中.这说明任何对象都可以调用这两个方法.这两个方法的方法签名如下: public final void wait() throws Interru...

似是而非Sage ⋅ 2016/05/01 ⋅ 0

Java 复习之多线程

什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程,一个进程可以理解成一个程序集,比如电脑中运行的 QQ 就是一个是一个进程,我们可以同时和多个人视频聊天,每一个聊天可...

maoqitian ⋅ 2017/12/02 ⋅ 0

Ifeve-No.01 Java并发和多线程

1、多线程优点 资源利用率更好:解决网络IO阻塞问题,能够使CPU在网络IO读取空闲时,处理其他事情 程序设计更简单:一个线程只需要关心自己的处理流程,不需要记录整个处理状态 程序响应更快...

shawntime ⋅ 2015/02/04 ⋅ 0

Java多线程剖析

问题的缘由源自于一道简单的面试题:题目要求如下: 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。 解决问题前我们前补充一些基本知识...

wf王帆 ⋅ 2016/07/20 ⋅ 0

pthread_cond_signal和pthread_cond_wait简介

pthreadcondsignal函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthreadcondsignal也会成功返回。 但使用pthre...

天下杰论 ⋅ 2013/08/08 ⋅ 0

Thread Signaling

本文大概意思都是都下边链接文章转换过来的,没有进行一字一句的翻译,只是把大概意思整里出来。 http://tutorials.jenkov.com/java-concurrency/thread-signaling.html 线程信号的目的是为了...

robin-yao ⋅ 2016/01/31 ⋅ 0

【java并发】条件阻塞Condition的应用

问题1:有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次……如此往返执行50次。 Condition将Object监视器方法(wait、notify 和 notifyAll)分...

久违了java ⋅ 03/09 ⋅ 0

Java 多线程编程总结

一、认识多任务、多进程、单线程、多线程 要认识多线程就要从操作系统的原理说起。 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在cop...

鉴客 ⋅ 2010/12/16 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

10个免费的服务器监控工具

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服...

李朝强 ⋅ 32分钟前 ⋅ 0

压缩工具之zip-tar

zip 支持目录压缩。使用yum安装zip包,使用yum安装unzip包 zip 1.txt.zip 1.txt #将1.txt文件压缩,新生成的压缩文件为1.txt.zip,原文件保留 zip -r 123.zip 123/ #-r对目录操作。将123/目录...

ZHENG-JY ⋅ 32分钟前 ⋅ 0

Dubbo @Activate注解使用和实现解析

Activate注解标识一个扩展是否被激活和使用,可以放在定义的类上和方法上,dubbo用它在SPI扩张类定义上,标识这个扩展实现激活的条件和时机,先看下定义: /** * Activate * <p/> * ...

哲别0 ⋅ 39分钟前 ⋅ 0

6.5 zip压缩工具 tar打包 打包并压缩

1.tar tar命令格式 [-zjxcvfpP] filename tar -z:表示同时用gzip压缩。 -j:表示同时用bzip2压缩。 -J:表示同时用xz压缩。 -x:表示解包或者解压缩。 -t:表示查看tar包里的文件。 -c:表示建...

oschina130111 ⋅ 41分钟前 ⋅ 0

Linux系统工程狮养成记

如今的社会,随着时代的发展,出现了很多职业,像电子类,计算机类的专业,出现了各种各样的工程师,有算法工程师,java工程师,前端工程师,后台工程师,Linux工程师,运维工程师等等,不同...

六库科技 ⋅ 47分钟前 ⋅ 0

Linux 机器的渗透测试命令备忘表

如下是一份 Linux 机器的渗透测试备忘录,是在后期开发期间或者执行命令注入等操作时的一些典型命令,设计为测试人员进行本地枚举检查之用。 此外,你还可以从这儿(https://gbhackers.com/c...

寰宇01 ⋅ 49分钟前 ⋅ 0

windows 安装java开发环境,配置jdk

下载jdk安装文件 链接:https://pan.baidu.com/s/1UEKPjnAdMqNj612B39Pfsg 密码:ipqx 如果javac无法使用 1,检查环境变量名称中是否有空格。。。,去除后即可 2,将JAVA_HOME替换为原始路径...

阿豪boy ⋅ 50分钟前 ⋅ 0

简析log4j的实现方式

刚加入新公司,对日志的要求比较严格,对此特意花了几天时间看了一下log4j的源码,大概了解了一下log4j的实现方式,总结如下: log4j的实现分为两个步骤:log4j.xml的加载,logger的使用 这里...

zdatbit ⋅ 今天 ⋅ 0

win环境下jdk7与jdk8共存配置

1.jdk安装包 jdk安装包 安装步骤略 2.jdk等配置文件修改 在安装JDK1.8时(本机先安装jdk1.7再安装的jdk1.8),会将java.exe、javaw.exe、javaws.exe三个文件copy到了C:\Windows\System32,这...

泉天下 ⋅ 今天 ⋅ 0

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部