返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现线程通信的案例讲解
  • 604
分享到

Java实现线程通信的案例讲解

2024-04-02 19:04:59 604人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

什么是线程通信、如何实现? 所谓线程通信就是线程间相互发送数据,线程通信通常通过共享一个数据的方式实现。 线程间会根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做。 线程通

什么是线程通信、如何实现?

所谓线程通信就是线程间相互发送数据,线程通信通常通过共享一个数据的方式实现。

线程间会根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做。

线程通信常见模型

生产者与消费者模型:生产者线程负责生产数据,消费者线程负责消费数据。

要求:生产者线程生产完数据后,唤醒消费者,然后等待自己;消费者消费完该数据后,唤醒生产者,然后等待自己

public class 多线程_5线程通信 extends Thread{
 
    public static void main(String[] args) {
        //定义线程类,创建一个共享的账户对象
        account3 a=new account3("abc",0);
        //创建两个取钱的线程对象
        new drawthread3(a,"小明").start();
        new drawthread3(a,"小红").start();
        //创建三个存钱的线程对象
        new savethread(a,"存钱罐1号").start();
        new savethread(a,"存钱罐2号").start();
        new savethread(a,"存钱罐3号").start();
    }
}
//存钱的线程类
class savethread extends Thread{
    //接收处理的账户对象
    private account3 acc;
    public savethread(account3 acc,String name){
        super(name);
        this.acc=acc;
    }
    public void run(){
        try {
            while (true){
                //存钱
                acc.savemoney(100000);
                //休眠2秒
                Thread.sleep(2000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
//取钱的线程类
class drawthread3 extends Thread{
    //接收处理的账户对象
    private account3 acc;
    public drawthread3(account3 acc,String name){
        super(name);
        this.acc=acc;
    }
    public void run(){
        try {
            while (true){
                //取钱
                acc.drawmoney3(100000);
                //休眠2秒
                Thread.sleep(2000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
class account3{
    private String cartId;
    private double money;//账户余额
 
    public account3() {
    }
 
    public account3(String cartId, double money) {
        this.cartId = cartId;
        this.money = money;
    }
 
    public String getCartId() {
        return cartId;
    }
 
    public void setCartId(String cartId) {
        this.cartId = cartId;
    }
 
    public double getMoney() {
        return money;
    }
 
    public void setMoney(double money) {
        this.money = money;
    }
 
    public synchronized void savemoney(double money) {
        //先获取是谁来存钱,线程名即是人名
        String name=Thread.currentThread().getName();
        //判断账户是否有钱
        try {
            if(this.money==0){
                //没钱,存钱
                this.money+=money;
                System.out.println(name+"来存钱,存了:"+money+"存钱后余额为:"+this.money);
                //有钱了
                //唤醒所有线程
                this.notifyAll();
                //对象,让当前线程进入等待
                this.wait();
            }else {
                //有钱,不存钱
                //唤醒所有线程
                this.notifyAll();
                //锁对象,让当前线程进入等待
                this.wait();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public synchronized void drawmoney3(double money) {
        //先获取是谁来取钱,线程名即是人名
        String name=Thread.currentThread().getName();
        try {
            //判断账户是否够钱
            if(this.money>=money){
                //有钱,取钱
                this.money-=money;
                System.out.println(name+"来取钱成功,取了:"+money+"余额是:"+this.money);
                //没钱了
                //唤醒所有线程
                this.notifyAll();
                //锁对象,让当前线程进入等待
                this.wait();
            }else{
                //余额不足
                //唤醒所有线程
                this.notifyAll();
                //锁对象,让当前线程进入等待
                this.wait();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上就是Java实现线程通信的案例讲解的详细内容,更多关于Java线程通信的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java实现线程通信的案例讲解

本文链接: https://lsjlt.com/news/149833.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java实现线程通信的案例讲解
    什么是线程通信、如何实现 所谓线程通信就是线程间相互发送数据,线程通信通常通过共享一个数据的方式实现。 线程间会根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做。 线程通信...
    99+
    2024-04-02
  • Java之线程编程的4种方法实现案例讲解
    1、继承Thread public class T4 { public static void main(String[] args) { System.out.print...
    99+
    2024-04-02
  • Java中实现线程间通信的实例教程
    目录前言1. 如何让两个线程依次执行?2. 如何让两个线程按照指定的方式有序相交?3. 线程 D 在A、B、C都同步执行完毕后执行4. 三个运动员分开准备同时开跑5. 子线程将结果返...
    99+
    2024-04-02
  • Java实现SMS短信通发送手机验证码案例讲解
    注册网建短信通账号 链接:http://sms.webchinese.cn/ 设置短信签名 注意不要乱写别的公司等,会被视为诈骗信息 设置短信密钥,发送时代替密码 Java方式...
    99+
    2024-04-02
  • 通过Java讲解ThreadPool线程池的示例
    这篇文章主要为大家展示了通过Java讲解ThreadPool线程池的示例,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“通过Java讲解ThreadPool线程池的示例”这篇文章吧。Java的特点有...
    99+
    2023-06-06
  • Java如何实现线程通信
    今天小编给大家分享一下Java如何实现线程通信的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是线程通信、如何实现所谓线程...
    99+
    2023-06-30
  • Java中的多线程如何实现线程通信
    这篇文章将为大家详细讲解有关Java中的多线程如何实现线程通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java多线程中线程间的通信一、使用while方式来实现线程之间的通信packag...
    99+
    2023-05-31
    java 多线程 线程通信
  • java isInterrupted()判断线程的实例讲解
    1、说明 isInterrupted()可以判断当前线程是否被中断,仅仅是对interrupt()标识的一个判断,并不会影响标识发生任何改变(因为调用interrupt()的时候会设...
    99+
    2024-04-02
  • Java多线程编程实现socket通信示例代码
    流传于网络上有关Java多线程通信的编程实例有很多,这一篇还算比较不错,代码可用。下面看看具体内容。TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的...
    99+
    2023-05-30
    java socket通信 ava
  • Java多线程求和实例讲解
    本篇内容主要讲解“Java多线程求和实例讲解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程求和实例讲解”吧!编写一个启动100个线程的程序,每个线程给一个初值为0的变量sum加1,...
    99+
    2023-06-17
  • 怎么在java中实现线程通信
    本篇文章给大家分享的是有关怎么在java中实现线程通信,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应...
    99+
    2023-06-14
  • Java中怎么实现多线程通信
    Java中怎么实现多线程通信,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概述多线程通信问题,也就是生产者与消费者问题生产者和消费者为两个线程,两个线程在运行过程中交替睡眠,生...
    99+
    2023-06-20
  • Java并发线程池实例分析讲解
    目录一.为什么要用线程池二.线程池的好处三.原理解析四.4种线程池五.线程池处理流程六.源码分析一.为什么要用线程池 先来看个简单的例子 1.直接new Thread的情况: ...
    99+
    2023-02-02
    Java并发线程池 Java线程池
  • python线程及多线程实例讲解
    进程和线程一、进程进程是程序的分配资源的最小单元;一个程序可以有多个进程,但只有一个主进程;进程由程序、数据集、控制器三部分组成。二、线程线程是程序最小的执行单元;一个进程可以有多个线程,但是只有一个主线程;线程切换分为两种:一种是I/O切...
    99+
    2023-01-31
    线程 多线程 实例
  • Java编程中实现Condition控制线程通信
    java中控制线程通信的方法传统的方式:利用synchronized关键字来保证同步,结合wait(),notify(),notifyAll()控制线程通信。不灵活。利用Condition控制线程通信,灵活。利用管道pipe进行线程通信,不...
    99+
    2023-05-30
    java 线程 condition
  • 怎么在java中实现线程间通信
    这篇文章将为大家详细讲解有关怎么在java中实现线程间通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。线程间通信:由于多线程共享地址空间和数据空间,所以多个线程间的通信是一个线程的数据可以...
    99+
    2023-05-30
    java
  • Java多线程中的生产者与消费者案例讲解
    这篇文章主要讲解了“Java多线程中的生产者与消费者案例讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程中的生产者与消费者案例讲解”吧!目录前言工具知识点设计思路具体步骤总结...
    99+
    2023-06-20
  • java 串口通信实现流程示例
    下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java下载下来的包解压后按照说明放到JAVA_HOME即JAVA的安装路径下面去在maven的pom.xml下添加 <dep...
    99+
    2023-05-30
    java 串口通信 ava
  • linux多线程编程详解教程(线程通过信号量实现通信代码)
    线程分类 线程按照其调度者可以分为用户级线程和核心级线程两种。 (1)用户级线程 用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持。在这里,...
    99+
    2022-06-04
    信号量 线程 多线程
  • Java通过wait()和notifyAll()方法实现线程间通信
    本文实例为大家分享了Java实现线程间通信的具体代码,供大家参考,具体内容如下Java代码(使用了2个内部类):package Threads;import java.util.LinkedList;public class ProdCon...
    99+
    2023-05-31
    java wait notifyall
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作