自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(43)
  • 收藏
  • 关注

转载 Java8 对多个异步任务进行流水线操作(笔记)

现在我们要对商店商品进行折扣服务.每个折扣代码对应不同的折扣率,使用一个枚举变量Discount.Code来实现这一想法,具体代码如下所示.以枚举类型定义的折扣代码/** * 折扣服务api * * @author Darcy * Created by Administrator on 2017/3/17. */public ...

2017-03-20 17:49:00 348

转载 Java8 CompletableFuture组合式的编程(笔记)

* 实现异步APIpublic double getPrice(String product) { return calculatePrice(product);}/** * 同步计算商品价格的方法 * * @param product 商品名称 * @return 价格 */private double calcul...

2017-03-20 17:45:00 269

转载 Java8 增强的Future:CompletableFuture(笔记)

CompletableFuture是Java8新增的一个超大型工具类,为什么说她大呢?因为一方面它实现了Future接口,更重要的是,它实现了CompletionStage接口.这个接口也是Java8新增加的,而CompletionStage拥有多达约40种方法, * 完成了通知我 * 异步执行任务通过CompletableFuture提供进一步封装,我...

2017-03-20 17:41:00 169

转载 Java8 更快的原子类:LongAdder(笔记)

更快的原子类:LongAdder 大家对AtomicInteger的基本实现机制应该比较了解,它们是在一个死循环内,不断尝试修改目标值,知道修改成功,如果竞争不激烈,那么修改成功的概率就很高,否则,修改失败的概率就很高,在大量修改失败时,这些原子操作就会进行多次循环尝试,因此性能就会受到影响 那么竞争激烈的时候,我们应该如何进一步提高系统性能呢?一种基本方...

2017-03-20 17:39:00 163

转载 Java8 读写锁的改进:StampedLock(笔记)

StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之间依然是冲突的,读锁会完全阻塞写锁,它使用的依然是悲观的锁策略.如果有大量的读线程,他也有可能引起写线程的饥饿 而StampedLock则提供了一种乐观的读策略,这种乐观策略的锁非常类似于无锁的操...

2017-03-20 17:37:00 185

转载 Java8 新的日期和时间API(笔记)

LocalDate LocalTime Instant duration以及Period使用LocalDate和LocalTime//2017-03-20LocalDate date = LocalDate.of(2017, 3, 20);int year = date.getYear();//2017 返回年份Month month = date....

2017-03-20 17:24:00 102

转载 java对象的强引用,软引用,弱引用和虚引用

1.强引用 以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。2.软引用(SoftReference) 如果一个对象只具有软引...

2016-12-22 18:14:00 205

转载 对性能有何帮助(读书笔记)

为每一个线程分配一个独立的对象对系统性能也许是有帮助的,当然了,这也不一定,这完全取决于共享对象的内部逻辑,如果共享对象对于竞争的处理容易引起性能损失,我们还是考虑使用ThreadLocal为每一个线程分配单独的对象.一个经典的案例就是在多线程下产生随机数:public class RandomDemo { public static final int ...

2016-12-22 18:12:00 106

转载 ThreadLocal的实现原理(读书笔记)

ThreadLocal的set方法和get方法,从set方法开始:public void set(T value) { Thread t = Thread.currentThread();//获取当前线程 ThreadLocalMap map = getMap(t);//获取线程的局部变量 if (map != null)//判断map是否存在...

2016-12-22 18:10:00 92

转载 ThreadLocal的简单使用(读书笔记)

从ThreadLocal的名字上可以看到,这是一个线程局部变量,也就是说,只有当前线程可以访问,既然是只有当前线程可以访问的数据,自然是线程安全的.public class ThreadLocalDemo { private static ThreadLocal<SimpleDateFormat> t1 = new ThreadLocal&lt...

2016-12-22 18:05:00 79

转载 Java虚拟机对锁优化所做的努力(读书笔记)

锁偏向 是一种加锁操作的优化手段,他的核心思想是:如果一个线程获得了锁,那么就进入偏向模式,当这个线程再次请求锁时,无须在做任何同步操作,因此在几乎没有锁竞争的场合,偏向锁是比较好的优化效果,因为连续多次极有可能是同一个线程请求同一个相同的锁,对于锁竞争比较激烈的场合,其效果不佳,因为竞争激烈的场合,最有可能的情况是每次都是不同的线程来请求相同的锁,这样偏向模式就会失...

2016-12-22 18:02:00 82

转载 锁的优化及注意事项(读书笔记)

有助于提高锁性能的几点建议减少锁的持有时间 真正需要同步加锁的时候在加锁,减少锁的持有时间有助于减低锁冲突的可能性,进而提升系统的并发能力,减少颗粒度,所谓减少颗粒度就是指缩小锁定对象的范围,从而减少锁冲突的可能性,进而提升系统的并发能力,问题在于类似于size()获取全局信息的方法调用并不频繁时,这种减少颗粒度的方法才能真正意义上提高系统吞吐量.(分割数据结构实现)读写...

2016-12-22 18:02:00 115

转载 线程的复用:线程池(读书笔记)

多线程的软件设计方法确实可以最大限度的发挥现代多核心处理器的计算能力,提高生产系统的吞吐量和性能,但是若不加控制和管理的随意使用线程,对熊的性能反而产生了不力的影响. 在实际生产环境中,线程的数量必须得到控制,盲目的大量创建线程对系统性能是有伤害的.什么是线程池: 为了避免系统频繁的创建和销毁线程,我们可以让创建的线程进行复用,大家对数据库连接池肯定不...

2016-12-22 17:49:00 96

转载 核心线程池的内部实现(读书笔记)

对于核心的几个线程池,无论是newFixedThreadPool()方法,newSingleThreadExecutor()还是newCachedThreadPool()方法,虽然看起来创建的线程有着完全不同的功能特点,但其内部实现均使用了ThreadPoolExecutor实现,下面给出了三个线程池的实现方式.public static ExecutorServi...

2016-12-22 17:43:00 102

转载 线程阻塞工具类:LockSupport(读书笔记)

他可以在线程任意位置让线程阻塞,LockSupport的静态方法park()可以阻塞当前线程,类似的还有parkNanos() ParkUntil()等,他们实现了一个限时等待public class LockSupportDemo { public static Object u = new Object(); static ChangeObjec...

2016-12-22 17:40:00 108

转载 循环栅栏:CyclicBarrier(司令要求任务) 读书笔记

可以理解为循环栅栏,栅栏就是一种障碍物.假如我们将计数器设置为10,那么凑齐第一批10个线程后,计数器就会归零,然后接着凑齐下一批10个线程,这就是循环栅栏的含义.构造器:public CyclicBarrier(int parties, Runnable barrierAction)parties:计数总数,也就是参与的线程总数. barrierAction...

2016-12-22 17:38:00 94

转载 倒计时:CountDownLatch(火箭发射前的准备)读书笔记

这是一个非常实用的多线程控制工具类,经典的场景就是 火箭发射,在火箭发射前,为了保证万无一失,往往还要进行各项设备,仪器的检查,只有等待所有的检查完毕后,引擎才能点火, CountDownLatch构造器接受一个整数作为参数,即当前这个计数器的计数个数.public CountDownLatch(int count)下面这个简单是的示例,演示了Cou...

2016-12-22 17:36:00 172

转载 ReadWriteLock 读写锁(读书笔记)

读写分离锁可以有效的帮助减少锁的竞争,提升系统的效率,读-读不互斥 读读之间不阻塞读-写互斥 读阻塞写,写也会阻塞读写-写互斥 写写阻塞在系统中,读操作次数远远大于写操作,则读写锁就可以发挥最大的功效,提升系统的性能.public class ReadWriteLockDemo { private static Lock lock = n...

2016-12-22 17:34:00 112

转载 允许多个线程同时访问:信号量(读书笔记)

信号量为多线程协作提供了更为强大的控制方法,广义上说,信号量是对锁的拓展,无论是内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一个资源,而信号量缺可以指定多个线程.同时访问某一个资源,信号量主要提供了一下构造函数:public Semaphore(int permits)public Semaphore(int permit...

2016-12-22 17:33:00 294

转载 重入锁的好搭档:Condition条件(读书笔记)

Condition结构提供了基本方法如下:void await() throws InterruptedException;void awaitUninterruptibly();long awaitNanos(long nanosTimeout) throws InterruptedException;boolean await(long time, Tim...

2016-12-22 17:32:00 109

转载 synchronized的功能拓展:重入锁(读书笔记)

重入锁可以完全代替synchronized关键字.在JDK5.0的早期版本中,重入锁的性能远远好于synchronized,但是从JDK6.0开始.JDK在synchronized上做了大量的优化.使得两者的性能差距不大,public class ReenterLock implements Runnable { public static ReentrantLo...

2016-12-22 17:31:00 74

转载 守护线程(读书笔记)

守护线程是一种特殊的线程.就和他的名字一样,他是系统的守护者,在后台默默的完成一些系统性的任务,与之对应的是用户线程,用户线程可以认为是系统工作线程,他会完成这个程序应该要完成的业务操作.如果用户线程全部结束,这也意味着这个程序实际上无事可做了.守护线程要守护的对象已经不存在了,那么整个应用程序就自然应该结束. 因此 当一个Java应用内,只要守护线程时,Java虚拟机就会自...

2016-12-13 18:35:00 81

转载 线程组(读书笔记)

在一个系统中,如果线程数量很多.而且功能分配比较明确.就可以将相同的功能的线程放在一个线程组里.public class ThreadGroupName implements Runnable { /** * When an object implementing interface <code>Runnable</code&...

2016-12-13 18:33:00 65

转载 线程的优先级(读书笔记)

Java中的线程可以有自己的优先级,优先级高的线程在竞争资源时会更有优势,更可能抢占资源. Java中 使用1到10表示线程优先级,一般可以使用内置的三个静态变量表示: public final static int MIN_PRIORITY = 1;/** * The default priority that is assigned t...

2016-12-13 18:32:00 84

转载 你必须知道的几个概念(读书笔记)

同步和异步同步和异步是用来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为,异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续操作.而异步方法通常会在另外一个线程中真实的执行,整个过程不会阻碍调用者的工作.打个比方 就想去超市买东西和网上购物一样.并发和并行他们都可以表示两个或者多个任...

2016-12-13 18:30:00 62

转载 线程安全的概念和Synchronized(读书笔记)

并行程序开发的一大关注重点就是线程安全,一般来说,程序并行化为了获取更多的执行效率,但前提是,高效率不能以牺牲正确性为代价,线程安全就是并行程序的根本和根基.volatile并不能真正保证线程安全,他只能确保一个线程修改了数据后,其他线程能够看到这个改动!public class AccountingVol implements Runnable { st...

2016-12-13 18:29:00 135

转载 线程的基本操作(读书笔记)

新建线程 新建线程很简单,只要使用new关键字创建一个线程对象.并且将它start()起来即可.那么线程start()后,会干什么呢?这才是问题的关键.线程Tread,有一个run()方法.start()方法就会新建一个线程并让这个线程执行run()方法Thread t1 = new Thread();t1.start();这里要注意...

2016-12-13 18:20:00 68

转载 Redis的安装和环境的搭建并设置服务(Redis学习笔记一)

由于Redis在win上安装实在是太过于麻烦.我们选择把redis安装部署在linux上,然后远程连接.安装Redis(1)cd /usr/src 进入下载目录(1) yum install -y wget gcc make tcl 安装依赖(2)wget http://download.redis.io/releases/redis-3.2.5.tar.gz 下...

2016-11-29 14:51:00 87

转载 Redis命令

字符串 可以存储3中类型的值 字符串,整数,浮点数incr incr key-name 将键存储的值加上1decr decr key-name 将键存储的值减去1incrby incrby key-name amount 将键存储的值加上整数amountdecrby decrby key-name amount 将键存储的值减去整数amountincr...

2016-11-18 14:11:00 57

转载 java8新特性学习笔记(三) 用流收集数据ing

ing转载于:https://www.cnblogs.com/ten951/p/6077529.html

2016-11-18 14:05:00 63

转载 java8新特性学习笔记(二) 使用流(各种API)

筛选和切片  用谓词筛选,筛选出各个不相同的元素,忽略流中的头几个元素,或将流截断至指定长度用谓词筛选 Stream接口支持filter方法,该操作接受一个谓词(返回一个boolean的函数) 作为参数,并返回一个包含所有符合谓词的元素的流. List<Dish> names = menu.stream()//从菜单中提取流 ...

2016-11-17 18:12:00 68

转载 mongodb分片片键的选择(持续更新中)

首先要了解项目的情况,检查使用情况对集合进行分片时,要选择一个或者两个字段拆分数据,这个键叫做片键 一旦拥有对个分片,在修改片键几乎是不肯能的事情,因此选择合适的片键是非常重要的.对集合分片之前要问自己集合问题计划做多少分片`?拥有三个分片的集群要比1000个的更具有灵活性,随着集群变得越来越大 不应做那些需要查询所有分片的查询,因此几乎所有查询都需包含片键分片是为了...

2016-11-17 10:49:00 313

转载 mongodb模拟生产环境的分片集群

分片是指数据拆分 将其分散在不同的机器上的过程,有时候也叫分区来表示这个概念.将数据分散到不同机器上 不需要功能强大的计算机就可以储存更多的数据,处理更大的负载. 几乎所有的数据库都能手动分片 应用程序需要维护与若干不同数据库服务器的连接,每个连接都是独立的 应用程序给I案例不同服务器上不同数据的存储,还管理在合适的数据库上查询的工作,这种方法能够很好的工作,但是难...

2016-11-17 10:44:00 109

转载 mongodb分片

分片是指数据拆分 将其分散在不同的机器上的过程,有时候也叫分区来表示这个概念.将数据分散到不同机器上 不需要功能强大的计算机就可以储存更多的数据,处理更大的负载. 几乎所有的数据库都能手动分片 应用程序需要维护与若干不同数据库服务器的连接,每个连接都是独立的 应用程序给I案例不同服务器上不同数据的存储,还管理在合适的数据库上查询的工作,这种方法能够很好的工作...

2016-11-17 10:36:00 76

转载 mongodb读写分离的一些选项的理解

默认情况下 驱动程序会将所有的请求路由到主节点 这通常也是你需要的 但是也可以通过设置驱动程序的读取首选项(read preferences)配置其他选项 可以在读选项中设置需要将查询路由到的服务器的类型虽然将读请求路由到到备份节点不是一个好主意 但是在特定的情况下这是有意义的 如果你正在考虑将读请求发送到备份节点 请先从下面几个方面好好权衡考虑一致性 对于一致性...

2016-11-17 10:32:00 113

转载 mongodb管理副本集(持续更新中)

许多维护工作不能在备份节点上完成 因为要写操作,也不能在主节点上进行,这就需要单机模式启动服务器, 是指重启成员服务器,让他成为一个单机运行的服务器,而不再是副本集中的一员(临时的) 在单机启动只要查看一下服务器的命令行参数 db.serverCmdLineopts() 然后启动时不要用replSet选项 制定一个别的端口好,保持dbpath不变.等维护完成后 在用启动副本集...

2016-11-17 10:29:00 77

转载 mongodb配置副本集(多台服务器间的副本集搭建) replica[ˈrɛplɪkə]

副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了“主节点挂掉了,整个集群内会自动切换”的问题。我们来看看mongoDB副本集的架构图:由图可以看到客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。我们看...

2016-11-17 10:23:00 270

转载 mongodb副本集的基础概念和各种机制

从一开始我们就在讲如何使用一台服务器.一个mongod服务器进程,如果只用做学习和开发,这是可以的,但如果在生产环境中,这是很危险的,如果服务器崩溃了怎么办?数据库至少要一段时间不可用,如果是硬件出现问题呢?可能需要将数据迁移到另一台机器上.使用复制供功能可以将数据副本保存在多台服务器上,建议在生产环境中都要使用,使用mongodb的复制功能,即使一台或者多台服务器出错,也可以...

2016-11-17 10:18:00 149

转载 mongodb的查询

MongoDB中使用find进行查询 查询就是返回一个集合中文档的子集 子集合的范围从0到整个集合 find的第一个参数决定了要返回那些文档 这个参数是一个文档 用于指定查询条件 空的查询文档会匹配集合的全部内容 db.c.find() 查询集合c 中的全部文档find({"age":27}) {"username":"joe"} {"username":"joe","age":27...

2016-11-17 10:15:00 151

转载 mongodb文档的CRUD

本章会介绍对数据库移入或者移出数据的基本操作向集合添加文档从集合删除文档更新现有的文档为这些操作选择合适的安全级别添加删除数据库添加数据库 :use foo 如果存在foo 就use 不存在就创建foo删除数据库 1 use 数据库名 2 db.dropDatabase()插入并保存文档向集合插入文档,并且查询文档 代码 :...

2016-11-17 10:13:00 103

空空如也

空空如也

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

TA关注的人

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