java多线程初探(零)线程间通信

JAVA多线程之线程间的通信方式 一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码。 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信。 参考示例: 由于线程A和线程B持有同一个MyObject类的对象object,尽管这两个线程需要调用不同的方法,但是它... 阅读详情

测试类:

package gcc.twoThreadTransData.waitAndNotify;

/**
 * 通过wait和notify来实现多线程间的通信,这样可以避免一直轮询的消耗
 * wait和notify需要在同步代码块内调用
 * 对正在wait的线程执行interrupt(),会报异常,同时释放锁
 *
 * 1,代码执行到wait,等待执行,并释放锁
 * 2,notify所在代码块获取之前wait释放的锁,执行代码块内容
 * 3,代码执行到notify,发出唤醒wait的通知,但不立刻释放锁,会先执行完当前程序再释放锁
 * 4,wait所在代码块获得锁,wait获得唤醒通知,继续执行wait下面的代码
 */
public class TestThread {

    public static void main(String[] args) {
        try {
            Object lock = new Object();
            ThreadB threadB = new ThreadB(lock);
            Thread.sleep(50);
            threadB.start();
            new ThreadA(lock).start();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

线程B,根据条件X执行等待

package gcc.twoThreadTransData.waitAndNotify;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ThreadB extends Thread {

    Object lock;

    protected static Logger logger = LoggerFactory.getLogger(ThreadB.class);

    public ThreadB(Object lock){
        this.lock=lock;
    }

    @Override
    public void run() {
        try {
            synchronized (lock) {
                if (MyList.size()!=5){
                    logger.info("before wait:"+System.currentTimeMillis());
                    lock.wait();
//                    lock.wait(5000);//如果超过5秒没有被唤醒,则自动唤醒
                    logger.info("after wait:"+System.currentTimeMillis());
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

线程A经过某些操作,条件X改变,在需要的时候唤醒线程B

package gcc.twoThreadTransData.waitAndNotify;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ThreadA extends Thread {

    Object lock;

    protected static Logger logger = LoggerFactory.getLogger(ThreadA.class);

    public ThreadA(Object lock){
        this.lock=lock;
    }

    @Override
    public void run() {
        try {
            synchronized (lock) {
                for (int i = 0; i <10 ; i++) {
                    MyList.add();
                    if (MyList.size()==5){
                        logger.info("发送唤醒通知");
                        lock.notify();
                    }
                    logger.info("添加了"+(i+1)+"个元素");
                    Thread.sleep(500);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

辅助类

package gcc.twoThreadTransData.waitAndNotify;

import java.util.ArrayList;
import java.util.List;

public class MyList {
    private static List list = new ArrayList();

    public static void add(){
        list.add("gcc");
    }

    public static int  size(){
        return list.size();
    }

}

 

Java多线程--线程间的通信 阅读详情

相关推荐

从零实现高精度手势检测:OpenCV+MediaPipe模型移植实战(2)(附c++完整代码)

上篇已经介绍了手掌检测的方法。本章将在手掌检测的基础上,完成手指关节的检测。

qq_37160641的博客 2666

java多线程初探(零)生产者消费者模式-线程通信

测试类 package gcc.twoThreadTransData.producerAndConsumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 多个线程之间通信 * 消费者生产者模式 * 多个生产者和消费者 * 流程: * 多个线程(生产者,消费者)公用一把锁 * 本例设置了两个生产者...

gcc_java的博客 181

Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)

本文详细介绍了如何在 Android 项目中集成 espeak-ng,实现中文离线语音播报。通过下载 so 库、编写 Java 接口、封装管理类,开发者可快速构建无需账号的 TTS 功能。文章覆盖从零到一的开发步骤、调试技巧及性能优化,适合中高级 Android 开发者参考。

全栈 3319

socket编程之pthread多线程通信

------------------------------------------------------------ 系统环境:Centos 6.5 ------------------------------------------------------------ /**********************************************************

我们的征途是星辰大海 3560

光流法实战:如何用OpenCV的Farneback算法实现图像对齐(附调参技巧)

本文详细介绍了如何使用OpenCV的Farneback稠密光流算法实现图像对齐,包括核心原理、参数调优和工程实现。通过实战代码和参数优化策略,帮助开发者解决动态场景中的图像对齐问题,提升多帧融合和视频处理的效果。

weixin_29266007的博客 291

MobilenetV1、V2、V3系列详解

Mobilenet系列模型作为当前主流的端侧轻量级模型被广泛应用,很多算法都会使用其作为backbone提取特征,这一章对Mobilenet系列模型V1,V2,V3做一个总结。

turned的博客 1万+

Java多线程学习笔记11之线程间通信

详细代码见:github代码地址   本节内容: 1) 等待/通知机制概念 2) 中断和轮询两种基本的方式 3) 等待/通知机制的实现 4) wait()/notify()/wait(long)/notifyAll()文档翻译   线程间通信 线程是操作系统中独立的个体,使线程间进行通信后,系统之间的交互性会更强大,在大大提高 CPU利用率的同时还会使程序员对各线程任务在处理...

you are sherlocked by me! 431

【第一章】基于Simulink的控制器开发教程——目录

摘要:本文系统介绍了基于Simulink的控制器开发方法,涵盖PID、状态反馈、模型预测(MPC)、模糊控制、自适应控制等8类主流控制器。针对每种控制器,详细阐述了其基本原理、适用场景,并通过Simulink建模与仿真测试进行实践验证。文章采用"理论+实践"的结构,从算法设计到硬件实现全流程展开,为汽车、航空航天、工业控制等领域的控制器开发提供完整解决方案,最后通过应用对比与学习总结帮助读者掌握不同控制器的核心特性和应用场景。(149字)

熟悉MATLAB/fpga/RK3588/LABVIEW/protus/单片机/dsp/Multisim 388

线程间通信

目录 一、线程理论基础 1、什么是线程 2、为什么有了进程,还要引入线程呢? (使用多线程到底有哪些好处?) 3、线程的缺点 二、多线程间通信 1、多线程通信的注意事项 2、创建线程的步骤 3、终止线程的方式 4、线程 API 使用 (1)pthread_create() 函数 (创建线程) (2)pthread_exit()函数 (结束线程) (3)pthread_join()函数 (等待线程结束) 三、线程同步 1、互斥量 (1)互斥量注意事项 (2)互斥锁创建步..

weixin_53812805的博客 4903

7、RNA 二级结构预测:包含接吻发夹基序的新策略

本文提出三种用于预测RNA二级结构中接吻发夹基序的新策略,结合规范化规则与非歧义动态规划,分别在时间与空间复杂度之间进行权衡。策略A以O(n⁴)时间和O(n²)空间实现高效预测;策略B通过存储次优结果扩大搜索空间,空间复杂度升至O(n³);策略C全面探索组合可能,时间复杂度为O(n⁵),但保持O(n²)空间。实验表明不同策略适用于不同复杂度的序列,为RNA结构预测提供了灵活且可扩展的解决方案。

j7k8l的博客 132

R语言 百度坐标转换至WGS84坐标

本文利用R语言封装了百度坐标转换至WGS84坐标的函数,亲测有效,提供了便捷的百度坐标转换方法。

qingchen98的博客 2135

C++11 实现多线程(线程同步、通信)实例的解析

C++ 11 多线程实例详解

youngpan1101的博客 1万+

YOLOv11改进策略【损失函数篇】| arXiv2025 TeLU双曲正切指数线性单元 强梯度防消失 + 解析光滑稳训练,极速提升收敛与泛化

本文记录的是。TeLU(Hyperbolic Tangent Exponential Linear Unit)通过。本文利用TeLU激活函数,以x⋅tanhex统一实现正区间强梯度加速收敛与负区间持续梯度避免死神经元,全程保持解析光滑与极低计算开销,,显著提升深度网络在分类、检测、分割、时序任务中的收敛速度、精度与泛化鲁棒性。

Limiiiing的博客 224

java多线程初探(零)使用Lock-线程间通信

测试类 package gcc.thread.Lock.condition; /** * 类似wait和notify,ReentrantLock使用Condition来控制等待和唤醒机制,并且可以根据分组唤醒指定的线程,选择性通知 * 如下,线程aa和ab在等待时所属不同的Condition,通过condition_A只唤醒了aa的等待 */ public class Test { ...

gcc_java的博客 224

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java 线程间通信

Java线程间通信

WYSCODER的博客 6158

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java多线程与线程间通信

本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程的众多常见重要知识点,学习后会对java多线程概念及线程间通信方式有直观清晰的了解和掌握,可以编写并分析简单的多线程程序。 进程与线程 进程:是一个正在执行的程序。 每一个进程执行都有执行顺序,一个执行顺序是一个执行路径,或者叫控制单元; 每一个程序启动时,都会在内存中分配一片空间,进程就用于标识这片空间,并

jerrying0203的专栏 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python 多线程及线程间通信

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 创建线程 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程并行执行不同的任务。 由于线程是操作系统直接支持的执行单元,因此,高级语言(如 Python、Java 等)通常都内置多线程的支持。Python 的标准库提供了两个模块:_thread 和 threading,_thread

billy的博客 1万+

Java中的多线程(线程间通信)

线程间通信: /学习笔记/ 多个线程在处理同一资源,但是任务却不同。 先看一个例子,采用两个线程执行进行输入和输出任务: //资源 class Resource { String name; String sex; } //输入 class Input implements Runnable { Resource r ; // Object o...

不思量 2万+

java干货 线程间通信

java干货 线程间通信

qq_51305563的博客 1419

【Java多线程】你知道实现Java线程间通信有多少种方法吗?

文章目录1. 锁与同步2. 等待/通知机制3. 信号量4. 管道5. 其它通信相关5.1 join() 方法5.2 sleep() 方法sleep() 与 wait() 的区别5.3 ThreadLocal 类5.4 InheritableThreadLocal 合理地使用 Java 多线程可以更好地利用服务器资源。一般来讲,线程内部有自己私有的线程上下文,互不干扰。但是当我们需要多个线程之间相互协作的时候,就需要掌握 Java 线程的通信方式。下文将介绍 Java 线程之间的几种通信机制和原理。 1. 锁

aaa_hao的博客 4546

Java多线程编程-(4)-线程间通信机制的介绍与使用

上一篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用线程间通信简介我们知道线程是操作系统中独立的个体,但是这个单独的个体之间没有一种特殊的处理方式使之成为一个整体,线程之间没有任何交流和沟通的话,他就是一个个单独的个体,不足以形成

徐刘根的博客 7976

【多线程】Java线程间是如何通信的呢?

一、同步 synchronized 共享内存机制 线程同步是线程之间按照⼀定的顺序执⾏,可以使⽤锁来实现达到线程同步,也就是在需要同步的代码块里加上关键字synchronized 。 二、信号量 共享内存机制 基于 volatile 关键字来实现的 volitile关键字能够保证内存的可⻅性,如果⽤volitile关键字声明了⼀个变量,在⼀个线程⾥⾯改变了这个变量的值,那其它线程是⽴⻢可⻅更改后的值的。 三、等待/通知机制(wait/notify) 基于Object 类的 wait() ⽅法和 notify

像风走过八千里 2122

Java 多线程解析:线程间的安全问题、线程间的通信问题与线程间的礼让问题

在 Java 编程领域,多线程是一个极为重要的概念,它能够显著提升程序的性能和响应能力,使程序能够更加高效地处理并发任务。本文将深入探讨 Java 中创建多线程的四种方式,以及多线程编程中的一些关键知识点,包括线程与进程的区别、线程安全问题、线程间通信、集合的线程安全性以及线程池的使用等。

天冬忘忧的博客 894

Java 是如何实现线程间通信的?

正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及到的知识点:Callable。本文代码:https://github.com/wingjay/HelloJava/blob/master/multi-thread/src/ForArticle.java下面我从几个例子作为切入点来讲解下 Java 里有哪些方法来实现线程间通信。如何让两个线程依次执行?那如何让两个线程按照指定方式有序交叉运行呢?

2501_92606851的博客 897
上一篇: java多线程初探(零)基础demo
下一篇: java多线程初探(零)生产者消费者模式-线程通信
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值