Yuchuan Weng.Miko Tech-Blog.

Yuchuan Weng.Miko Tech-Blog.

Welcome to QuanQuan.Miko Tech-Blog.
Java开发、大数据、分布式系统、技术总结、技术分享
Java-Develop、BigData、Distributed System、Technical Summary、Technical Sharing
.

Java并发编程笔记(八)NIO与AIO
NIO简介Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 基本概念 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Non-blocking IO(非阻塞IO) Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进...
Java并发编程笔记(七)并行模式与算法2
改进的插入排序:希尔排序插入排序是一种很常用的排序算法,它的基本思想是:一个未排序的数组(当然也可以是链表)可以分为2个部分,前半部分是已经排序的,后半部分是未排序的,在进行排序时候只需要在未排序的部分中选择一个元素将其插入到前面有序的数组中即可,最终未排序的元素越来越少直至为0,初始时可以假设已排序部分就是第一个元素。插入排序算法如下:1234567891011121314151617181920212223242526/** * 插入排序展示 */ public static void insertSort(int arr[]){ Objects.requireN...
Java并发编程笔记(五)锁的优化及其注意事项2
让普通变量也享受原子操作:AtomicIntegerFieldUpdater/Long/Reference普通变量通过该类也可以享受原子操作CAS的线程安全特性。使用如下:public static final AtomicIntegerFieldUpdater<T> field = AtomicIntegerFieldUpdater.newUpdater(T.class,"FieldName");来进行构造,也可以使用cas的incrementAndGet()方法进行自增等操作。但是使用该类需要注意以下几点:1、Updater只能修改其可见范围,例如必须...
Java并发编程笔记(四)锁的优化及其注意事项
我们采用并行算法的目的是为了提升效率,但事实上使用多线程的方式会额外地增加系统开销,如果在单核CPU上并行CPU的效率一般低于串行的,因此合理地使用并发才能将CPU性能发挥到极致。 有助于提高锁性能的几点建议减少锁持有时间如果每个程序都占用锁时间很长。那么将是是一笔非常大的开销,只在必要时候进行同步就能明显减少开销,提高系统吞吐量。(减少锁的占有时间也有效地降低锁冲突的可能性 进而提升系统的并发能力) 减小锁粒度减小锁的粒度也是一种削弱多线程锁竞争 的有效手段。前面所介绍的HashMap,如果你直接在类上加synchronized锁 那么无疑是线程安全的,但是这也锁粒度太大,所以性能很低...
Java并发编程笔记(三)JDK并发包详解2
线程复用:线程池一个系统中,如果盲目大量地创建线程对系统是有伤害的。大量的线程回收也会给GC增加很大的压力,延长GC的停顿时间,同数据库连接池一样,为了避免创建和销毁线程的高开销,对线程进行复用,需要时从线程池中获取线程,用完还给线程池,让线程池 空闲线程 和 工作线程 处于一个动态平衡之中。 不要重复发明轮子:JDK对线程池的支持为了更好地控制多线程,JDK提供了一套Executor框架,帮助开发人员进行线程控制,其本质就是线程池。包含了许许多多的方法,以上成员均在java.util.concurrent包中,都是jdk并发包的核心类。其中ThreadPoolExecutor表示一个线...
Java并发编程笔记(二)JDK并发包详解1
synchronized的功能扩展:重入锁重入锁完全可以替代Synchronized关键字,在java5以前重入锁的性能远远好于synchronized关键字,但从jdk6开始,synchronized上做足了优化,使得两者性能差距并不大。重入锁使用java.util.concurrent.locks.ReentrantLock类来实现。重入锁的基本示例如下: 123456789101112131415161718192021222324252627282930313233343536373839404142package thread.test.concurrent;import ja...
Java并发编程笔记(一)基础概念理解
走入并行世界Linux之父 Linus Torvalds 表示忘掉那该死的并行,除服务端和图像处理之外。(因为图像处理需要极大的计算量,一张1024*768的像素图片需要78万6千多像素 所以设计大量的矩阵计算 需要并行处理提高效率。服务端也一样,就想TB Tmall的双十一。) 摩尔定律的失效:摩尔定律是由英特尔创始人之一戈登摩尔提出来的,其内容为:集成电路上可容纳的晶体管的数目 约每隔24个月便会增加一倍,经常被引用为18个月,即每隔18-24个月计算机性能就会翻上一番。然而英特尔公司在CPU 4GHz芯片上失败了 ,硬件方面无法实现便使得多核汇聚在一个核上,出现了各式各样的多核处...
缓存那些事儿
前言一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图1所示,用户请求从界面(浏览器或App界面)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的),如何能够有效利用有限的资源来提供尽可能大的吞吐量?一个有效的办法就是引入缓存,打破标准流程,每个环节中请求可以从缓存中直接获取目标数据...
HBase概念及操作(四)内部表原理以及拆分操作
上一篇介绍了JavaAPI以及基本Shell指令,这一篇我们将介绍HBase内部表原理以及拆分操作 hbase(main):013:0> scan 'hbase:meta'这个指令我们可以看出scan扫描hbase名称空间下的meta表,返回列加Cell。rowKey为唯一的,info为列族,:regioninfo为列名。123456timestamp这个时刻该行的的cell的值格式(都是key=>value对 ','分割) 或者单独的一个值,val=xxx :value={EN 3498206.ab1abd27f20f CO...
翁玉川Miko
现居:ShangHai·China 欢迎交流留言~
Fast Link
百度 栈溢出 CSDN