摘要:指令重排序是JVM为了优化指令,提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度。编译器、处理器也遵循这样一个目标。注意是单线程。多线程的情况下指令重排序就会给程序员带来问题。 是为了保证单线程的运行效率,可以进行指令优化,不影响单线程的执行效果 但是指令重排在多线程之中会出
阅读全文
摘要:Java异常处理面试题归纳 1、error和exception有什么区别 error表示系统级的错误,是java运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是Java虚拟机抛出的。 exception 表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善
阅读全文
摘要:java异常处理之try_catch_finally 看下面的一个列子: 程序的运行结果是: 23002 如果你的答案是正确的且知道是为什么,那么下面的内容相信你也不用看了。 首先这里我就不细说java的异常处理机制,想了解的同学可以去看看java异常处理深入研究。 我们首先对try_catch_f
阅读全文
摘要:java异常处理之try_catch_finally 看下面的一个列子: 程序的运行结果是: 23002 如果你的答案是正确的且知道是为什么,那么下面的内容相信你也不用看了。 首先这里我就不细说java的异常处理机制,想了解的同学可以去看看java异常处理深入研究。 我们首先对try_catch_f
阅读全文
摘要:http://cv.qiaobutang.com/tpl/?skip=60
阅读全文
摘要:1、先举例下面的一个列子 下面看一个网上流传最广泛的例子:门和警报的例子:门都有open( )和close( )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念: 但是现在如果我们需要门具有报警alarm( )的功能,那么该如何实现?下面提供两种思路: 1)将这三个功能都放在抽象类里面,
阅读全文
摘要:1 观察者模式的原理,首先由一个主题,当主题发送变化的时候,通知该主题的订阅者 按照上面的分析我们来进行设计 1.抽象主题Subject 2.抽象观察者Obsever 3.具体主题WeatherData 主题:相当的经典,第一具体的主题和多个观察者的集合,当自己的天气发送变化的时候,调用观察者的 5
阅读全文
摘要:1、首先类的实例化、static、父类构造函数执行顺序 我们来看下面的程序代码: 程序的运行结果是: main app run..I`m a static {} from class A..I`m a static {} from class B..top of A() a1=8 a2= a3=9g
阅读全文
摘要:堆放实例对象,栈放实例对象的引用,方法区存储创建类的信息 上面堆和垃圾回收的关系,垃圾回收回收的是堆内存的数据,s0和s1区域, 例如现在我们要清除s0中的堆对象,将s0中正在运行的对象从s0区域移动到s1区域中,然后将s0中要被清除的堆对象清除,现在对象都存储在s1中,s0中为空,即下来要清除s1
阅读全文
摘要:一、Java基础 1. String类为什么是final的。 2. HashMap的源码,实现原理,底层结构。 3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。。。 4. 描述一下ArrayList和LinkedList各自实现和区别 5. Java中的队列都有哪
阅读全文
摘要:1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了。 2 异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知) 告诉朋友自己合适衣服的尺寸,大小,颜色,让
阅读全文
摘要:AsynchronousServerSocketChannel assc.accept(this, new ServerCompletionHandler()); 第一个参数是服务器的处理类,第二个参数当服务接受到客户端的连接之后,用来处理客户端的连接 这里accept并不是一直阻塞的,会继续向下面
阅读全文
摘要:记住NIO在jdk1.7版本之前是同步非阻塞的,以前的inputsream是同步阻塞的,上面学习完成了Buffer现在我们来学习channel channel书双向的,以前阻塞的io的inputstream都是单向的 channel有四种连接状态 connect accept read write
阅读全文
摘要:在NIO同步非阻塞的场景中和原来同步阻塞最大的却别就是引入了上面的Buffer对象,现在我们来学校上面的BUffer对象 我们来看看程序的代码: 程序的输出结果是: 使用flip复位:java.nio.HeapIntBuffer[pos=0 lim=3 cap=10]容量为: 10限制为: 3获取下
阅读全文
摘要:在上面一节中,服务端收到客户端的连接之后,都是new一个新的线程来处理客户端发送的请求,每次new 一个线程比较耗费系统资源,如果100万个客户端,我们就要创建100万个线程,相当的 耗费系统的资源,服务器是没有办法支持这样多的客户端进行连接的 我们可以采用线程池的方式来实现:提高 阻塞模式:列如客
阅读全文
摘要:客户端的代码: 我们来对上面的功能进行总结:
阅读全文
摘要:1、首先介绍下那个时候使用RingBuffer,那个时候使用disruptor ringBuffer比较适合场景比较简单的业务,disruptor比较适合场景较为复杂的业务,很多复杂的结果必须使用disruptor 我们来看看多消费者多生产者的情况 程序运行的效果是: 当前消费者: c1,消费信息:
阅读全文
摘要:先c1和c2并行消费生产者产生的数据,然后c3再消费该数据 我们来使用代码实现:我们可以使用Disruptor实例来实现,也可以不用产生Disruptor实例,直接调用RingBuffer的api来实现,不清楚看上一节使用的api函数workpool和BatchEventProcess来辅助实现消费
阅读全文
摘要:在helloWorld的实例中,我们创建Disruptor实例,然后调用getRingBuffer方法去获取RingBuffer,其实在很多时候,我们可以直接使用RingBuffer,以及其他的API操作。我们一起熟悉下示例: 使用EventProcessor消息处理器。 BatchEventPro
阅读全文
摘要:小故事:Disruptor说的是生产者和消费者的故事. 有一个数组.生产者往里面扔芝麻.消费者从里面捡芝麻. 但是扔芝麻和捡芝麻也要考虑速度的问题. 1 消费者捡的比扔的快 那么消费者要停下来.生产者扔了新的芝麻,然后消费者继续. 2 数组的长度是有限的,生产者到末尾的时候会再从数组的开始位置继续.
阅读全文
摘要:Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。 在使用之前,首先说明disruptor主要功能加以说明,你可以理解为他是一种高效的"生产者-消费者"模型。也就性能远远高于传统的BlockingQu
阅读全文
摘要:我们来看程序的代码: 程序运行的结果是: t3线程进行初始化操作...t2线程进行初始化操作...t2线程初始化完毕,通知t1线程继续...t3线程初始化完毕,通知t1线程继续...t1线程继续执行... t1线程只有等t2和t3线程初始化完成之后才能执行..... 程序的运行结果是: lisi 准
阅读全文
摘要:我们来看下面程序的代码:经典的生产者消费者来实现 程序的运行结果是: 当前线程:pool-1-thread-2, 获取了数据,id为:1, 进行装载到公共缓冲区中...当前线程:pool-1-thread-1, 获取了数据,id为:2, 进行装载到公共缓冲区中...当前线程:pool-1-threa
阅读全文
摘要:Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。一、什么是Maste
阅读全文
摘要:多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future、Master-Worker、Guard Susperionsion 一、什么是Future模型: 该模型是将异步请求和代理模式联合的模型产物。类似商品订单模型。见下图: 客户端发送一个长时间的请求,服务端不需等待该数据处理
阅读全文
摘要:在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。 Dela
阅读全文
摘要:PriorityBlockingQueue是一个基于优先级堆的无界的并发安全的优先级队列(FIFO),队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。 实现原理 PriorityBlockingQueue通过使用堆这种数据结构实
阅读全文