首页 文章 精选 留言 我的

精选列表

搜索[聚类],共10000篇文章
优秀的个人博客,低调大师

Java并发-线程安全的集合类

注意,此处所提供的代码,都是基于JDK1.8版本,部分代码与之前版本存在较大差异 1、Hashtable:通过synchronized关键字保证线程安全 2、ConcurrentHashMap:效率比Hashtable高,主要体现在前者使用了锁分离技术,即代码块锁,而不是方法锁 保证线程安全的方法(JDK1.8中):在ConcurrentHashMap中,随处可以看到U, 大量使用了U.compareAndSwapXXX的方法,这个方法是利用一个CAS算法实现无锁化的修改值的操作,他可以大大降低锁代理的性能消耗。这个算法的基本思想就是不断地去比较当前内存中的变量值与你指定的一个变量值是否相等,如果相等,则接受你指定的修改的值,否则拒绝你的操作。因为当前线程中的值已经不是最新的值,你的修改很可能会覆盖掉其他线程修改的结果。这一点与乐观锁,SVN的思想是比较类似的。 3、CopyOnWriteArrayList:实现原理比较简单,就是利用之前写过的Java中的锁ReentrantLock进行加锁处理,写操作进行加锁处理,读操作则是利用复制容器的方式 4、CopyOnWriteArraySet:CopyOnWriteArrayList的装饰器模式 CopyOnWrite容器,即写时复制的容器,通俗理解就是当我们往一个容器中添加元素的时候,不直接往当前容器中添加,而是先将当前容器进行copy,复制出一个新的容器,然后新的容器里面添加元素,添加完元素之后,再将原容器的引用指向新的容器,这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素,但是添加元素的时候需要加锁,防止多个并发线程搞出多个复制容器来 所以CopyOnWrite容器比较多用于读多写少的并发场景,比如白名单,黑名单,商品类目的访问和更新等场景, CopyOnWrite的注意: 1、减少扩容开销 2、尽可能使用批量添加 CopyOnWrite的缺点: 1、内存占用,复制容器的时候同时存在两个容器,而且写完之后,由于垃圾处理机制的原因,原容器可能还会留存一段时间 2、数据一致性问题,只能保证数据的最终一致性,不能保证数据的实时一致性 5、Vector 矢量队列,实现了List,通过synchronized关键字保证线程安全,跟Hashtable类似 6、StringBuffer和StringBuilder中,Stringbuffer是线程安全的,通过synchronized关键字保证线程安全。 最后复制粘贴一些关于CAS的文章链接,感觉说的挺好的 https://blog.csdn.net/hsuxu/article/details/9467651

优秀的个人博客,低调大师

Python入门(四)数学类函数总结

数学常量 圆周率:pi; 自然常数:e。 数学函数 返回数字的绝对值,且值的类型取决于原参数的类型(复数返回浮点型):abs( x )x---数值 >>> abs(-1.23) 1.23 >>> abs(3+4j) 5.0 返回浮点数或整数的绝对值,且值的类型只能是浮点型:fabs( x )x---数值 >>> import math >>> math.fabs(-1.23) 1.23 返回数字上取后的整数:ceil( x )x---数值 >>> import math # ceil(x)不能直接访问,需先导入 math 模块 >>> math.ceil(-0.74) 0 返回数字下舍后的整数:floor(x)x---数值 >>> import math # floor(x)不能直接访问,需先导入 math 模块 >>> math.floor(-0.74) -1 返回x的小数部分与整数部分,注意整数部分以浮点型表示:modf(x)x---数值 >>> import math # modf(x)不能直接访问,需先导入 math 模块 >>> math.modf(-111.222) (-0.2219999999999942, -111.0) 返回浮点数x的四舍五入值:round(x [, n]) x---浮点数; n---精度 >>> round(111.222333444, 6) 111.222333 返回x的y次方:pow() 1)内置方法 >>> pow(2, 3) #把参数作为整型 8 2)导入math模块 >>> import math #把参数作为浮点型 >>> math.pow(2, 3) 8.0 返回数字x的平方根:sqrt(x)x---数值 >>> import math # sqrt(x)不能直接访问,需先导入 math 模块 >>> math.sqrt(100) 10.0 返回x的自然对数:log(x)x---数值表达式 >>> import math # log(x)不能直接访问,需先导入 math 模块 >>> math.log(0.1353352832366127) -2.0 返回x的指数:exp( x )x---数值表达式 >>> import math # exp(x)不能直接访问,需先导入 math 模块 >>> math.exp(-2) 0.1353352832366127 返回给定参数的最大值,参数可以为序列:max( x, y, z, .... )x,y,z---数值 >>> max(1, 3, 2) 3 返回给定参数的最小值,参数可以为序列:min( x, y, z, .... )x,y,z---数值 >>> min(1, 3, 2) 1 随机数函数 从序列的元素中随机挑选一个元素:choice(seq)seq---列表,元组或字符串 >>> import random >>> print('DJY,are you handsome?',random.choice(['--SURE!','--NOT AT ALL!','--GUESS?'])) DJY,are you handsome? --SURE! 从给定的范围返回随机项:randrange ([start,] stop [,step])start---指定范围内的开始值,包含在范围内; stop---指定范围内的结束值,不包含在范围内;step---步长,默认为1。 >>> import random >>> random.randrange(11, 999, 12) 587 返回随机生成的一个实数,它在[0,1)范围内: random() >>> import random >>> random.random() 0.5895961190959703 改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数:seed(x)x---改变随机数生成器的种子,可不设置 >>> import random >>> random.seed(10) >>> random.random() 0.5714025946899135 >>> random.seed(10) >>> random.random() 0.5714025946899135 随机生成一个在[x,y]范围内的实数:uniform(x, y)x---最小随机数; y---最大随机数; >>> import random >>> random.uniform(0.15,578) 168.77383737106067 返回随机排序后的序列:shuffle (lst)lst---列表 >>> import random >>> list1 = ['酷狗音乐','网易云音乐','QQ音乐', '虾米音乐'] >>> random.shuffle(list1) >>> list1 ['QQ音乐', '虾米音乐', '酷狗音乐', '网易云音乐'] 三角函数 返回x的反正弦、反余弦弧度值:asin(x) 、acos(x)x--- -1到1之间的数值 >>> import math >>> math.acos(0.55) 0.9884320889261531 >>> import math >>> math.asin(0.55) 0.5823642378687435 返回x的反正切弧度值:atan(x)x---数值 >>> import math >>> math.atan(0.55) 0.5028432109278609 返回给定的 X 及 Y 坐标值的反正切值:atan2(y, x)x,y---数值 >>> import math >>> math.atan2(0.55,0.55) 0.7853981633974483 返回x的弧度的正弦值、余弦值、正切值:sin(x)、cos(x)、tan(x)x---数值 >>> import math >>> math.sin(0.55) 0.5226872289306592 >>> import math >>> math.cos(0.55) 0.8525245220595057 >>> import math >>> math.tan(0.55) 0.6131052132881357 返回欧几里德范数 sqrt(x*x + y*y):hypot(x,y) x,y---数值 >>> import math >>> math.hypot(1,2) 2.23606797749979 将弧度转换为角度:degrees(x) x---数值 >>> import math >>> math.degrees(-2) -114.59155902616465 角度转换为弧度:radians() x---数值 >>>import math >>> math.radians(-2) -0.03490658503988659 最后有点感想,对于函数,往往看中的是它的功能以及返回值,有些函数功能很类似,但是不要忽略了,他们运行速度的微略差距,也许很不起眼,但是并不渺小。 END!

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册