来源:达内教育IT培训沈阳分校
时间:2023/12/28 15:21:27
沈阳专业的Java开发培训机构面授点在沈河区,学Java开发推荐沈阳达内教育,沈阳达内教育,20多年专注it教育,国内值得信赖的教育机构,全国各地拥有多个教学中心,30大类线上线下it课程(UI设计,影视,剪辑包装,Java开发,AI人工智能)等,开始「AI全场景学习」时代!
Paho是什么?
Paho Java客户端是用Java编写的MQTT客户端库,用于开发在JVM或其他Java兼容平台(例如Android)上运行的应用程序。
Paho不仅可以对接EMQ X Broker,还可以对接满足符合MQTT协议规范的消息代理服务端,目前Paho可以支持到MQTT5.0以下版本。MQTT3.3.1协议版本基本能满足百分之九十多的接入场景。
Paho Java客户端提供了两个API:
1:MqttAsyncClient提供了一个完全异步的API,其中活动的完成是通过注册的回调通知的。
2:MqttClient是MqttAsyncClient周围的同步包装器,在这里,功能似乎与应用程序同步。
什么是分布式锁?
在多线程开发中,对共享资源的争抢过程(Data Race)就是并发,而对共享资源数据进行访问保护的较直接办法就是引入锁。锁的作用是解决在并发状态下的共享资源互斥问题,增加在同一时间只有一个进程/线程可以掌握资源的控制权。
单机环境下,资源竞争者都是来自机器内部((进程/线程),那么实现锁的方案只需要借助单机资源就可以了。
Synchronized中的重量级锁,底层就是基于锁监视器(Monitor)来实现的。简单来说就是锁对象头会指向一个锁监视器,而在监视器中则会记录一些信息,比如:
- _owner:持有锁的线程
- _recursions:锁重入次数
因此每一个锁对象,都会指向一个锁监视器,而每一个锁监视器,同一时刻只能被一个线程持有,这样就实现了互斥效果。但前提是,多个线程使用的是同一把锁。
比如有三个线程来争抢锁资源,线程1获取锁成功,如图所示:
此时其它线程想要获取锁,会发现监视器中的_owner已经有值了,就会获取锁失败。
版权所有:搜学搜课(www.soxsok.com)