线程之间通信之Notify,wait_注意使用if

间隔打印A,B:

      注意点:如果使用if,会使此处 处于wait状态线程被唤醒,
      状态改变没有及时响应直接往下执行,可能 出现重复打印A或B;
      使用while可以再次校验;
        (!){
            .wait()}
Print {
    =() InterruptedException {
        (!){
            .wait()}
        System..println()= .notify()}
    () InterruptedException {
        (){
            .wait()}
        System..println()=.notify()}
}
A Thread {
    Print (Print p) {
        .= p}

    () {
        .run()(){
            {
                .printA()Thread.()} (InterruptedException e) {
                e.printStackTrace()}
        }
    }
}
B Thread {
    Print (Print p) {
        .= p}

    () {
        .run()(){
            {
                .printB()Thread.()} (InterruptedException e) {
                e.printStackTrace()}
        }
    }
}

打印效果:

A A A A A
B B B B B
A A A A A
B B B B B
A A A A A
B B B B B
A A A A A
B B B B B
A A A A A
B B B B B
A A A A A
B B B B B
A A A A A
B B B B B
A A A A A
B B B B B
A A A A A

时间: 2024-10-01 13:09:28

线程之间通信之Notify,wait_注意使用if的相关文章

java 线程之间通信以及notify与notifyAll区别。

jvm多个线程间的通信是通过 线程的锁.条件语句.以及wait().notify()/notifyAll组成. 下面来实现一个启用多个线程来循环的输出两个不同的语句. package com.app.thread; import javax.swing.plaf.SliderUI;/** * 看出问题来 * @author Gordon * */public class LockDemo { public static void main(String[] args) {//  System.o

(转载) Android两个子线程之间通信

Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报  分类: 个人杂谈 版权声明:本文为博主原创文章,未经博主允许不得转载. Android中,相信主线程和子线程之间的通信大家都不陌生了吧.在一次面试经历中被问到了两个子线程之间是如何进行通信的.哎呦!这可蒙住我了.后来回家研究了下,分享给大家. 其实android中线程通信无非就是handler和looper的操作. 一般情况下的主线

Android中子线程和UI线程之间通信的方式

Android中子线程和UI线程之间通信的详细解释 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?下面详解一下. 2.首先在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 3.Handler: (1).概念: Handler是沟通Activity 与Thread/runnable的桥梁.而Handler是运行在主UI线程中的,它与子线程

Android两个子线程之间通信

Android中,相信主线程和子线程之间的通信大家都不陌生了吧.在一次面试经历中被问到了两个子线程之间是如何进行通信的.哎呦!这可蒙住我了.后来回家研究了下,分享给大家. 其实android中线程通信无非就是handler和looper的操作. 一般情况下的主线程和子线程之间的通信,都是通过主线程中的handler把子线程中的message发给主线程中的looper,或者,主线程中的handler通过post向looper中发送一个runnable.looper默认存在于main线程中.那么子线

Android:使用Handler在线程之间通信

概述 假设一个情景,在一个应用程序中,要完成一个比较复杂.耗时较长的计算任务,如果将这个任务直接在主线程中开始,那么用户界面就会停止对用户操作的响应,而去解决这个计算任务,直到任务完成. 显然,这不是我们想要的结果.那么就需要用到多线程来解决这个问题. 但是新的问题又出现了,在C#和Android中,子线程是不能直接修改用户界面的数据的.也就是说,子线程计算出的结果,不能直接在子线程中让它显示在用户界面上.那么就需要把数据首先传递给主线程,让主线程去修改用户界面. Handler就是为了解决这个

转:【Java并发编程】之十一:线程间通信中notify通知的遗漏(含代码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17228213 notify通知的遗漏很容易理解,即threadA还没开始wait的时候,threadB已经notify了,这样,threadB通知是没有任何响应的,当threadB退出synchronized代码块后,threadA再开始wait,便会一直阻塞等待,直到被别的线程打断. 遗漏通知的代码 下面给出一段代码演示通知是如何遗漏的,如下: [java] view plain co

Android线程---UI线程和非UI线程之间通信

当主线程sendMessage后,子线程便会调用handleMessage来获取你所发送的Message.我的主线程向子线程发送消息时携带了数据,子线程根据主线程发送来的数据进行数据库查询,并将查询后的结果返回给该主线程: 1  public class UpdataPeople extends Activity { 2 3     EditText updata_name; 4     EditText updata_phone; 5     EditText updata_address;

iOS开发中的错误整理,线程之间通信练习,加载图片的练习中出现的错误 -- Http请求错误

控制台打印:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. 程序禁止了http明码的访问,系统认为不安全.可通过info.plist文件临时设置.下面给出设置的方法: 找查资料后发现,新特性要求

distri.lua线程间通信的设计

首先简单介绍下distri.lua中的线程设计方案. distri.lua提供一个API函数fork用于创建新的C线程,这个C线程运行独立的lua虚拟机,为了在各线程之间通信 每个线程都会创建一个channel,用于接收其它线程发送过来的消息. 这个channel内部实现为单向链表,为了将channel的处理与网络消息处理接口合并,channel使用tls为每个单 独的 线程创建一个管道,这个管道被添加到proactor中监听,如果一个线程尝试从channel中读消息,而消息队 列为空,就 将这