2013年11月1日

Deque

摘要: Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。 Deque在Queue的基础上增加了更多的操作方法。 从上图可以看到,Deque不仅具有FIFO的Queue实现,也有FILO的实现,也就是不仅可以实现队列,也可以实现一个堆栈。 同时在Deque的体系结构图中可以看到,实现一个Deque可以使用数组(ArrayDeque),同... 阅读全文

posted @ 2013-11-01 20:11 小嘟 阅读(452) 评论(0) 推荐(0)

BlockingQueue

摘要: 转:http://wsmajunfeng.iteye.com/blog/1629354前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示:从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出;常用的. 阅读全文

posted @ 2013-11-01 17:31 小嘟 阅读(252) 评论(0) 推荐(0)

Android消息处理机制

摘要: Google参考了Windows的消息处理机制,在Android系统中实现了一套类似的消息处理机制。学习Android的消息处理机制,有几个概念(类)必须了解:1. Message消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程。2. Message Queue消息队列,用来存放通过Handler发布的消息,按照先进先出执行。3. HandlerHandler是Message的主要处理者,负责将Message添加到消息队列以及对消息队列中的Message进行处理。4. Looper循环器,扮演Message Queu 阅读全文

posted @ 2013-11-01 15:39 小嘟 阅读(239) 评论(0) 推荐(0)

Atomic

摘要: 一、何谓Atomic?Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成)在x86 平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指 阅读全文

posted @ 2013-11-01 14:40 小嘟 阅读(510) 评论(0) 推荐(0)

Java Atomic

摘要: 十五年前,多处理器系统是高度专用系统,要花费数十万美元(大多数具有两个到四个处理器)。现在,多处理器系统很便宜,而且数量很多,几乎每个主要微处理器都内置了多处理支持,其中许多系统支持数十个或数百个处理器。要使用多处理器系统的功能,通常需要使用多线程构造应用程序。但是正如任何编写并发应用程序的人可以告诉你的那样,要获得好的硬件利用率,只是简单地在多个线程中分割工作是不够的,还必须确保线程确实大部分时间都在工作,而不是在等待更多的工作,或等待锁定共享数据结构。问题:线程之间的协调如果线程之间不需要协调,那么几乎没有任务可以真正地并行。以线程池为例,其中执行的任务通常相互独立。如果线程池利用公共工作 阅读全文

posted @ 2013-11-01 14:37 小嘟 阅读(647) 评论(0) 推荐(0)

android面试题

摘要: 1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念:答:dvm是dalivk虚拟机。每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实例。而每一个dvm都是在linux的一个进程。所以说可以认为是同一个概念。2.android的动画有哪几种?他们的特点和区别是什么?答:两种,一种是tween动画,一种是frame动画。tween动画,这种实现方式可以使视图组件移动,放大或缩小以及产生透明度的变化。frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。3.handler进制的原理:答:android提供了han 阅读全文

posted @ 2013-11-01 14:10 小嘟 阅读(299) 评论(0) 推荐(0)

多线程Callable和Future

摘要: 关于多线程Callable和Future 实现多线程我们可以继承Thread类或者实现Runnable接口,通过Thread类把run()方法包装成线程执行体,但是这两种方法都不能直接把任意方法直接包装成线程执行体,比如说一个带返回值的方法,或者一个抛异常的方法。 从java 5开始,Java提供了Callable接口,该接口是Runnable接口的增强版,Callable接口提供了一个call()方法,可以作为线程执行体,但call()方法比run()方法的功能更强大。call()方法可以有返回值。call()方法可以声明抛出异常。因此我们完全可以提供一个Callable对象作为Thread 阅读全文

posted @ 2013-11-01 11:44 小嘟 阅读(418) 评论(0) 推荐(0)

volatile和synchronized

摘要: 这个可能是最好的对比volatile和synchronized作用的文章了。volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符。所以我们使用这两种关键字来指定三种简单的存取变量的方式。 int i1; int geti1() {return i1;}volatile int i2; int geti2() {return i2;}int i3; synchronized int geti3() {return i3;}geti1()在当前线程中立即获取在i1变量中的值。线程可以获得变量的本地拷贝,而所获得的变量的值并不一定与其他线程所获得的值相同。特别... 阅读全文

posted @ 2013-11-01 10:03 小嘟 阅读(235) 评论(0) 推荐(0)

导航