Java并发编程《一》

对Java并发编程学习已经有段时间了,知识需要系统的学习才能更好的理解,也要勤于整理才不至于学了之后时间一长就模糊,然后实践中多用,该总结的时候还是不能偷懒的。

从事开发时,有时会遇到线程之间的协作问题。obj.wait(),obj.notify(),obj.notifyAll(),t.join(),t.yield()成为了我们进行线程协作的常用方法,他们的区别和原理在网上很容易就可以搜到。
本人在从事开发的过程中,数次理清他们之间的关系,但一直没有做过总结整理,时间一长记忆就模糊了。

查看更多

Java阻塞队列-BlockingQueue

队列是一种数据结构。它有两个基本操作:在队列尾部加入一个元素和从队列头部移除一个元素。就是说,队列以一种先进先出的方式管理数据(FIFO (first-in-first-out)),如果你试图向一个已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞。在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。

查看更多

Java代码块

在编程过程中我们可能会遇到如下这种形式的程序:

public class Test {
    {
        ////
    }
}

这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法。一般来说代码块是不能单独运行的,它必须要有运行主体。

查看更多

使用序列化实现对象的拷贝

我们知道在 Java 中存在这个接口 Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过 new 生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。然而我们知道拷贝分为深拷贝和浅拷贝之分,但是浅拷贝存在对象属性拷贝不彻底问题。关于深拷贝、浅拷贝的请参考这里:渐析 java 的浅拷贝和深拷贝

查看更多

Java 集合细节(一):请为集合指定初始容量

集合是我们在 Java 编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许)。当这个海、容器的量变得非常大的时候,它的初始容量就会显得很重要了,因为挖海、扩容是需要消耗大量的人力物力财力的。同样的道理,Collection 的初始容量也显得异常重要。所以:对于已知的情景,请为集合指定初始容量。

查看更多