现在大多数服务都是分布式部署,分布式环境下需要考虑同步问题时需要用到分布式的同步锁。
首页 | 归档 | 关于 |
|
现在大多数服务都是分布式部署,分布式环境下需要考虑同步问题时需要用到分布式的同步锁。
对Java并发编程学习已经有段时间了,知识需要系统的学习才能更好的理解,也要勤于整理才不至于学了之后时间一长就模糊,然后实践中多用,该总结的时候还是不能偷懒的。
从事开发时,有时会遇到线程之间的协作问题。obj.wait(),obj.notify(),obj.notifyAll(),t.join(),t.yield()成为了我们进行线程协作的常用方法,他们的区别和原理在网上很容易就可以搜到。
本人在从事开发的过程中,数次理清他们之间的关系,但一直没有做过总结整理,时间一长记忆就模糊了。
队列是一种数据结构。它有两个基本操作:在队列尾部加入一个元素和从队列头部移除一个元素。就是说,队列以一种先进先出的方式管理数据(FIFO (first-in-first-out)),如果你试图向一个已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞。在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。
System.getenv()是获取系统环境变量,System.getProperty()是获取当前系统相关属性信息。
我们知道在 Java 中存在这个接口 Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过 new 生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。然而我们知道拷贝分为深拷贝和浅拷贝之分,但是浅拷贝存在对象属性拷贝不彻底问题。关于深拷贝、浅拷贝的请参考这里:渐析 java 的浅拷贝和深拷贝
我们经常使用 subString 方法来对 String 对象进行分割处理,同时我们也可以使用 subList、subMap、subSet 来对 List、Map、Set 进行分割处理,但是这个分割存在某些瑕疵。
在实际开发过程中我们经常使用 asList 讲数组转换为 List,这个方法使用起来非常方便,但是 asList 方法存在几个缺陷:
集合是我们在 Java 编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许)。当这个海、容器的量变得非常大的时候,它的初始容量就会显得很重要了,因为挖海、扩容是需要消耗大量的人力物力财力的。同样的道理,Collection 的初始容量也显得异常重要。所以:对于已知的情景,请为集合指定初始容量。