加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 运营 > 正文

Windows上必备的7个国产小众软件

发布时间:2021-02-01 10:44:28 所属栏目:运营 来源:互联网
导读:根据Vector的源代码可知:Vector的每个方法都使用了synchronized关键字修饰,因此锁对象就是这个对象本身。在上面的代码中我们尝试获取的也是vct对象的锁,可以和vct对象的其它方法互斥,因此这样做可以保证得到正确的结果。 如果Vector内部使用的是其它锁同

根据Vector的源代码可知:Vector的每个方法都使用了synchronized关键字修饰,因此锁对象就是这个对象本身。在上面的代码中我们尝试获取的也是vct对象的锁,可以和vct对象的其它方法互斥,因此这样做可以保证得到正确的结果。

如果Vector内部使用的是其它锁同步的,并封装了锁对象,那么我们无论如何都无法正确执行这个“先判断后修改”的操作。

假设被封装的对象锁为obj,get()和remove()方法对应的锁都是obj,而整个操作过程获取的是vct的锁,一个线程调用get()方法成功后就释放了obj的锁,这时这个线程只持有vct的锁,而其它线程可以获得obj的锁并抢先一步删除了第0个元素。

Java为开发者提供了很多强大的工具类,这些工具类里面有的是线程安全的,有的不是线程安全的。在这里我们列举几个面试常考的:

线程安全的类:Vector、Hashtable、StringBuffer

非线程安全的类:ArrayList、HashMap、StringBuilder

有人可能会反问:为什么Java不把所有的类都设计成线程安全的呢?这样对于我们开发者来说岂不是更爽吗?我们就不用考虑什么线程安全问题了。

事情都是具有两面性的,获得线程安全但是性能会有所下降,毕竟锁的开销是摆在那里的。线程不安全但是性能会有所提升,具体场景还得看业务更偏向于哪一个。

一个问题引发的思考:
 

帧格式

R1响应0x01表示在响应之前发送的命令已导致卡进入空闲状态。响应字节0x00表示命令已被接受,SD卡将等待后续的事件发生。如果设置了R1响应中的任何其他位,则是错误的结果,并且将降低到图中每个R1响应位中提到的因数。

不同类型的响应及其含义如下所示;
 

48位的命令格式

每个命令的恒定长度为6个字节。第一个字节是命令编号和数字64的 加法。例如:对于CMD0:命令编号0 + 64 = 64 = 0x40(十六进制)。

对于CMD1:十六进制命令号1 + 64 = 65 = 0x41。

随后是一组四个字节,称为参数。

这些参数通常包含数据的地址或块的长度。

最后一个字节是CRC(循环冗余校验)字节。

如果未启用CRC功能,则大多数SPI模式下的命令都不需要校验字节。

对于某些命令,例如CMD0,CRC为0x95,在大多数情况下,发送的是0xFF。

启用CRC要求您从微控制器发送正确的校验字节。因此,请确保启用或禁用了CRC功能。

发送命令的格式如下所示;

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读