自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (1)
  • 收藏
  • 关注

原创 读书笔记:性能调优

1.通常使用Synchronized关键字同步代码,可读性好,如果涉及性能问题,可以使用显式的Lock对象2.免锁容器:通用策略:对容器的修改可以与读取操作同时发生,只要读取者只能看到完成修改的结果即可。修改是在容器数据结构的某个部分的一个单独的副本上执行的,并且这个副本在修改过程中不可视。只有当完成修改时,被修改的结构才会自动的和主数据结构交换,之后读取者就可以看到这个修改了。有Concur...

2018-07-19 10:03:53 247

原创 读书笔记:新类库中的构件

1.CountDownLatch:被用来同步一个或多个的同步任务,强制它们等待由其他任务执行的一组操作完成。可以向CountDownLatch对象设置一个初始计数值,任何在这个对象上调用wait()方法都将阻塞,直到这个计数值到达0。其他任务在结束工作的时候,可以在这个对象上调用countDown()来减小这个计数值。典型用法:把一个任务分割成n个独立的可解决任务,并创建值为0的CountDown...

2018-07-19 09:37:11 281

原创 读书笔记:死锁

概念:某个任务在等地另外一个任务,后者又在等待别的任务,一直下去,直到这个链上的任务又在等第一个任务释放锁,这就得到了一个人任务之间互相等待的连续循环,没有哪个线程能够继续,叫死锁。同时满足四个条件就发生死锁:1.互斥条件,任务使用的资源中至少有一个是不能共享的2.至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源3.资源不能被任务抢占,任务必须把资源当做普...

2018-07-18 14:56:12 200

原创 读书笔记:notify和notifyAll

1.由于在技术上可能有多个任务在单个对象上出于wait()状态,因此使用notifyAll()比notify()更安全2.notify()在众多等待同一个锁的任务中只有一个被唤醒,如果使用notify,必须保证被唤醒的是正确的任务;为了使用notify,所有任务必须等待相同的条件,如果有很多任务等待不同的条件,不能知道是否唤醒了正确的任务;当条件发生变化时,必须只有一个任务能从中受益。注:...

2018-07-18 11:23:19 3491

原创 读书笔记:线程间的协作

1.锁机制可以很好的解决线程之间资源的竞争访问,通过wait和notify实现线程间的握手合作wait:调用sleep方法锁并没有施放,调用yield也是同样的情况。当一个任务在方法里遇到了对wait的调用的时候,线程的执行被挂起,对象上的锁被施放,这意味着另外的一个任务可以获取这个锁,因此该对象的其他shnchronized方法可以在wait期间被调用,这一点很重要,因为这些其他的方法通常将...

2018-07-18 11:13:51 191

原创 读书笔记:解决共享资源的竞争

1.基本上所有的并发模式在解决线程冲突,都采用序列化访问共享资源的方案,意味着在给定时刻只允许一个任务访问共享资源。通常就是在代码前加上一条锁的语句来实现,这就使得一段时间内只有一个任务可以运行这段代码。因为锁语句产生了一种互斥的效果,所以这种机制也称互斥量。2.java提供关键字synchronized形式,为防止资源冲突提供了内置支持。当任务要执行synchronized关键字保护的代码,...

2018-07-18 08:37:14 488

原创 缓存器细节

ByteBuffer由数据和可以高效地访问以及操作这些数据的四个索引组成,这四个索引是:mark(标记)、position(位置)、limit(界限)和capacity(容量)部分方法:capacity():返回缓存区的容量clear():清空缓存区,将position设置0,limit设置为容量,可以调用这个方法覆写缓存区flip():把limit设置为position,positon设置为0,...

2018-07-16 14:53:57 280

原创 ByteBuffer编码和解码设置

FileChannel fileChannel2=new FileInputStream("D:\\abr.txt").getChannel();Charset charset=Charset.forName("utf-8");ByteBuffer byteBuffer=ByteBuffer.allocate(BIZE);while (fileChannel2.read(byteBuff...

2018-07-16 14:06:07 3290

原创 ByteBuffer

FileChannel in=new FileInputStream("D:\\abr.txt").getChannel(); File file=new File("D:\\abc.txt"); if (!file.exists()){ file.createNewFile(); } ByteBuffer byteBuffer=ByteBuffer.allocate(102...

2018-07-16 13:43:58 199

原创 容器的选择

List选择:1.对于有数组组成的ArrayList,无论列表的大小如何,get和set访问速度很快和一致。LinkedList,访问时间对于较大的列表明显增加访问时间2.在ArrayList列表插入元素,必须创建空间并把所有的引用向前移动,这会随着Arraylist的尺寸增加带来负担;LinkedList底层基于链表,会在每一个位置保存前一个元素、后一个元素的引用和自身值,只需要链接新的元素即可...

2018-07-13 10:11:48 407

原创 hashcode和equals

HashCode最重要的因素:1.无论何时,对同一个对象调用hashcode()都应该生成同样的值。2.想要使用hashcode实用,必须速度快,并且有意义,也就是,它必须基于对象的内容生成散列码,散列码不必要是独一无二的,更应该关注的是速度,但是通过hashcode()和equals()这两个方法唯一确定对象的身份。3.由于在生成桶的下标前,hashcode()还需要做进一步的处理,所以散列码的...

2018-07-13 09:13:24 176

原创 读书笔记:set和map

Set和存储顺序:Set(interface):存入set的元素都必须是唯一的,set不保存重复元素。加入set的元素必须定义equals()方法以保证对象的唯一性。Set和Collection有完全一样的接口。Set接口不保证元素的次序HashSet:为快速查找而设计的Set,存入HashSet的元素必须定义HashCode();TreeSet:保持次序的Set,底层为树结构,使用它可以从set...

2018-07-12 16:46:27 163

原创 读书笔记:数组

为什么是数组?数组就是一个简单的线性序列,元素的访问速度非常快,但是这种速度的代价就是在其生命周期内,数组对象的大小是被固定的;数组可以在编译器来提醒你插入或取出合适的数据类型;数组可以保存基本数据类型,容器是基于自动拆包装包才可以保存基本类型;在保持方面,对象数组保存对象的引用,基本数据类型保存值。数组和泛型没有很好的结合,不能实例化具有参数化类型的数组。Arrays实用功能:复制数组:数组中保...

2018-07-12 14:31:00 180

原创 读书笔记:字符串

1.不可变的Sring:String作为参数,实际传递的是一个引用的一个拷贝,该引用所指的对象一直在单一的物理位置上,保持不动。2.重载“+”和StringBuilder:重载“+”编译器不断的构建StringBuilder对象,调用toString()方法;字符串的拼接使用StringBuilder,提高效率,StringBuilder提供丰富方法,insert()、replace()等,但是不...

2018-07-11 10:39:38 181

Android官方mvp

Android官方mvp todo

2017-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除