- 博客(13)
- 资源 (9)
- 收藏
- 关注
转载 java并发编程--Executor框架
摘要: Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务的线程相当于消费者,并用Runnable来表示任务,Executor的实现还提供了对生命周期的支持,以及统计信息收集,应用程序管理机制和性能监视等机制。Exexctor简介E...
2018-08-25 20:47:44 243
原创 Spring事务传播属性和隔离级别
事务的传播属性(Propagation)@Transactional(propagation=Propagation.REQUIRED):这个是默认的属性。如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。@Transac...
2018-08-10 22:53:37 188
原创 Java IO 总结
IO的分类BIO(Blocking I/O):同步阻塞IO以电脑为中心,InputStream(Reader)就是将外部数据以流的形式加载到电脑的内存中,OutputStream(Writer)就是把内存中的数据以流的形式向外输出。字节流:以xxStream命名,一般成对出现,如InputStream,OutputStream常见的字节流: * 文件流:FileInput...
2018-08-10 22:51:19 150
原创 JDK8和JDK9双版本共存
摘要: 原创出处 https://peijie-sh.github.io 欢迎转载,保留摘要,谢谢!以前安装JDK,需要手动配置环境变量。JDK8多了自动配置环境变量,所以可以不用手动配置。 如果我已经装了JDK8,还想再装一个JDK9,安装完,自动配置的环境变量会指向JDK9版本。解决方法删除自动配置的环境变量 自动配置的环境变量是一个隐藏目录:C:\Program...
2018-08-10 22:38:13 5465 1
转载 集合迭代时对集合进行修改抛ConcurrentModificationException原因的深究以及解决方案
大家应该都知道, 在java中, 在对一些集合迭代的过程中对集合进行一些修改的操作, 比如说add,remove之类的操作, 搞不好就会抛ConcurrentModificationException, 这一点在API文档上也有说的! 在迭代时只可以用迭代器进行删除! 但是文档上只是说了删除, 其他操作也会引起ConcurrentModificationException, 这是为何呢...
2018-08-10 22:09:48 290
原创 理解JVM(七):垃圾回收器
一些概念并行(Parallel)指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。并发(Concurrent)指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。吞吐量CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时...
2018-08-01 11:39:22 129
原创 理解JVM(六):线程安全和锁优化
线程安全的实现方法互斥同步互斥是因,同步是果;互斥是方法,同步是目的。synchronized关键字synchronized关键字是基本的互斥同步手段。它在编译后会在同步代码块前后加入2条字节码指令:monitorenter和monitorexit这两个字节码都需要一个reference类型的参数来指明要锁定和解锁的对象。如果Java程序中的synchronized指定...
2018-08-01 11:38:54 171
原创 理解JVM(五):Java内存模型与线程
Java内存模型JMM(Java Memory Model)是JVM定义的内存模型,用来屏蔽各种硬件和操作系统的内存访问差异。 * 主内存:所有的变量都存储在主内存(Main Memory,类比物理内存)中。 * 工作内存:每条线程有自己的工作内存(Working Memory,类比处理器高速缓存),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋...
2018-08-01 11:37:33 401
原创 理解JVM(四):JVM类加载机制
Class文件我们写的Java代码,经过编译器编译之后,就成为了.class文件,从本地机器码变成了字节码。Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。Class文件中只有2种数据结构:无符号数和表。每个Class文件的头4...
2018-08-01 11:36:57 170
原创 理解JVM(三):JVM命令工具
jps(JVM Process Status Tool)虚拟机进程状况工具,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(MainClass,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)。命令格式:jps[options][hostid]参数: -q:只输出LVMID,省略主类名称...
2018-08-01 11:36:24 127
原创 理解JVM(二):垃圾收集算法
判断哪些对象需要被回收引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 但是JVM没有使用此方法,因为此方法无法解决2个对象相互循环引用的问题。可达性分析算法: 这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路...
2018-08-01 11:35:51 142
原创 Spring的事件机制
当把一个事件发布到Spring提供的ApplicationContext中,被监听器侦测到,就会执行对应的处理方法。事件本身事件是一个自定义的类,需要继承Spring提供的ApplicationEvent。@Datapublic class MyEvent extends ApplicationEvent { private String msg; publ...
2018-08-01 11:35:00 209
原创 TCP的3次握手和4次挥手过程
建立连接(3次握手)SYN是标志位,设置SYN=1,表示请求建立连接服务端会同时和多个客户端建立连接,所以在报文交互时,需要带上序号seq,在响应是seq+1,以此来检测报文合法性连接过程客户端:我想建立一个连接。状态:CLOSED -> SYN SENT服务端:可以,我同意建立连接。状态:LISTEN -> SYN RCVD客户端:好的,我收到你的确认...
2018-08-01 11:33:53 187
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人