6 IT_tangh

尚未进行身份认证

暂无相关描述

等级
TA的排名 6w+

Java并发编程(五)-- ReentrantLock

锁是用来控制多个线程访问共享资源的方式,对共享资源加锁能够有效解决对资源的并发问题,比如在方法中或方法块中加synchronized关键字。在JDK5以后并发包中增加了Lock接口,用来实现锁功能。Lock提供了与Synchronized类似的同步功能,但是在使用时需要显示的获取和释放锁,故而Lock又称为“显示锁”,Synchronized则称“隐式锁”。Lock相对于Synchronized,...

2018-05-25 23:23:15

JVM进阶之GC(五)对象的内存分配和回收策略

简单回顾下JVM内存结构和垃圾回收器。JVM内存结构JVM内存主要由新生代、老年代、永久代构成。新生代(YoungGeneration):大多数对象在新生代中被创建,其中很多对象的生命周期很短。每次新生代的垃圾回收(又称MinorGC)后只有少量对象存活,所以选用复制算法,只需要少量的复制成本就可以完成回收。新生代内又分三个区:一个Eden区,两个Survivor区(一般而...

2018-05-21 17:02:42

Java并发编程(四)-- AQS

锁是用来控制多个线程访问共享资源的方式,对共享资源加锁能够有效解决对资源的并发问题,比如在方法中或方法块中加synchronized关键字。在JDK5以后并发包中增加了Lock接口,用来实现锁功能。Lock提供了与Synchronized类似的同步功能,但是在使用时需要显示的获取和释放锁,故而Lock又称为“显示锁”,Synchronized则称“隐式锁”。Lock相对于Synchronized,...

2018-05-01 17:45:16

Java并发编程(三)-- 线程池及其常用实现

Java里的线程池在平日的工作用的不算少,特别是有大量数据需要多线程处理的情形,那么大家在用之前是不是该刨根问底呢?我们知道,线程池不光是Java里有涉及,各大开源框架、中间件、数据库等都会设计不同类型的线程池,比如Dubbo、Tomcat、MySQL等等等,因为使用线程池的好处如下:通过重复利用已经创建的线程降低线程创建和销毁带来的性能损耗;提高任务的响应速度,任务不需要等待线程创建...

2018-04-06 19:57:44

Java并发编程(二)-- synchronized

从上一篇讲线程中,我们了解到了线程的各个状态,以及如何状态间的转换。此篇来温习下,线程的阻塞状态与运行态是怎样的转换过程。synchronized我们知道,多个线程相互配合的完成某一项工作,必然牵扯到对共享资源的竞争。而synchronized关键字便是有效实现多个线程间同步操作的利器,可以使共享资源在同一时间只能被一个线程享用,从而保证了线程对共享资源的可见性和排他性,实现线程安全。...

2018-03-30 22:51:28

Java并发编程(一)-- 线程

线程是现代操作系统调度的最小执行单元,也有轻量级进程一说。一个进程可包含多个线程,或者说一个进程里可创建多个线程,每个线程都有自己独立的计数器、栈等等信息,并且能够访问共享的堆内存中变量数据。线程的状态Java的线程是有生命周期的,在运行过程中处于以下6种状态之一:状态名称说明NEW初始状态,线程被构建,但是还没有调用start0方法RUNNABLE运行状态,...

2018-03-28 22:47:04

笔试题(1)--两个线程交叉打印递增数字,用synchronized和wait实现

朋友在最近的笔试中遇到一道笔,如下:开启两个线程,一个线程打印1到100的奇数。如1,3,7…99.另外一个线程打印1到100的偶数。如2,4,6…100.1到100的数字最终打印出来格式是1,2,3,4,5…100.要求用synchronized和wait实现.Talkischeap,showmethecode:publicclassWaitT...

2018-03-23 23:14:37

JVM进阶之GC(四)垃圾收集器

上一篇讲了下垃圾回收算法,今天就来说说垃圾回收算法的具体实现吧–垃圾收集器(本文讨论的是JDK1.7版本的HotSpot虚拟机)。垃圾收集器HotSpot虚拟机提供的收集器如下图:新生代的垃圾收集器有:Serial、ParNew、ParallelScavenge;老年代的垃圾收集器有:CMS、SerialOld、ParallelOldG1收集器因运用的还不是很广泛...

2018-02-05 22:57:35

JVM进阶之GC(三)垃圾回收算法

上篇我们讨论了怎么判断对象是否存活,判了“死刑”的对象就会在垃圾回收中被回收掉。那么本文将说说JVM是如何回收垃圾的。垃圾回收算法标记-清除算法算法的过程就如同算法的名字,分为标记和清除两个阶段:首先标记出所有要回收的对象,然后对标记的对象统一清除。算法很简单,再看下逻辑图:内存空间经过标记清除算法回收的过程一目了然,从图中也能看出这种算法的不足,即标记清除后会产生大量

2018-01-24 23:16:28

JVM进阶之GC(二)对象存活判断算法

上一篇简单的说明了对象在JVM中的内存分代策略,此文继续来为GC打基础,说说什么样的对象需要被GC,即对象是否存活判定算法。判定对象存活算法如何判断对象沦为了垃圾也是门技术。引用计数法引用计数法就是给对象加个引用计数器,每有一个地方引用到它时,这个引用计数器就加1。当引用失效的时候,计数器的值就减1,也就是说根据引用计数器的值来判断对象是否存活,若值是0,那么该对象就不再被

2018-01-22 22:20:35

JVM进阶之GC(一)内存分代

前言我们知道,java语言与c++语言最大的不同点就是在垃圾回收的处理上,java有了专门的垃圾自动回收机制,而c++需要手动回收内存垃圾。既然java的垃圾回收这么NB,那今天就来整理JVM的垃圾回收这块内容吧。首先得明确几点目的:1.为什么需要了解JVM的垃圾回收,让JVM自己去处理不就好了?2.是回收什么东西?3.是什么时候回收的?4.JVM是怎么进行垃圾回收

2018-01-21 22:43:09

JVM进阶之运行时数据区

前言  最近在看重温JVM相关的知识点,但总感觉看书很枯燥乏味,看别人的博客知识又显得零碎,知识体系不够系统,所以有必要把所见所闻所学的点,好好地梳理成文,加强自己理解程度的同时,挖掘自身的盲点。好了,鸡血不宜多,让我们开始JVM的新篇章。  话说平时开发中的我们有曾想过写过的代码运行在哪儿,比如在类中声明了static类型的变量,在方法中new了一个对象等等……如果这些都不了解,我只能说

2018-01-19 23:08:49

源码浅析--String

源码浅析先拿String开刀。试问自己,平常工作中用的那么多,但是真的了解String吗?想要真正了解一个类,还得从源码入手。(本文JDK源码版本1.7.0_75)publicfinalclassStringimplementsjava.io.Serializable,ComparableString>,CharSequenceString实现了Ser

2018-01-16 23:25:55

必知必会的单例模式

在开发过程中,有些对象我们至始至终只需要一个实例,比如配置文件、工具类、线程池、缓存、日志对象等,如果创造多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等。基于以上的问题,单例模式应运而生了,下面来看看单例的实现方式吧。v1.0(非线程安全懒汉版)packagecom.v1;publicclassSingleton{//私有构造方法p

2018-01-11 23:05:27

如何控制线程执行的顺序?

如何控制线程执行的顺序?要解决如上的题目,得理解题意的重心在哪。关键词:线程与顺序。先来一段多线程执行的代码。publicclassTest{publicstaticvoidmain(String[]args){Threadt1=newThread(newMyThread1());Threadt2=new

2018-01-11 22:56:43

netty之基础概念

1、缓冲区BufferBuffer是一个存储读入或写出的对象。在面向流的IO中,可以将数据写入Stream或读取Stream对象的数据。而NIO是面向Buffer,面向缓冲区的,数据的写入或读取操作都是在缓冲区中进行的。Buffer的实质就是一个数组,但是比数组功能更强大,通常是一个ByteBuffer,也可以使用其他类型的数组。每一种基本类型都有对应的一种缓冲区(除了Boolean),比如Char

2017-07-26 19:47:39

有一个任务队列,分别有A、B、C三种类型的任务,设计一种功能,让三种任务分别按照x:y:z(具体比例可配置)的比例进行执行

朋友的面试题,如下有一个任务队列,分别有A、B、C三种类型的任务,设计一种功能,让三种任务分别按照x:y:z(具体比例可配置)的比例进行执行解之。主要的思路是lock+condition处理任务调度。

2017-07-26 19:13:05

原型模式

什么是原型模式?百科定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。通俗的说,就是复制现在的已有对象,来创建新的对象,java对象里的复制粘贴。实现方式Object类中提供有本地方法clone,java类只要实现了Cloneable接口,就可以使用clone方法来进行对象的拷贝,使用很简单,下面来看代码:publicclassPrototypeimplements

2017-07-02 11:06:49

代理模式

今天聊聊平时工作中很常见的Java设计模式–代理模式。什么是代理模式?为其他对象提供一种代表,以控制对这个对象的访问。代理对象起到中介的作用,用户与代理对象打交道,不直接接触实际对象。使用代理模式创建代表对象,让代理对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或者需要安全控制的对象。常见的代理模式:远程代理–为不同地理的对象,提供局域网对象(监控全国分店)虚拟代理

2017-05-14 23:09:09

JVM探秘之GC

GC的三个问题(what,when,how),带着问题去思考。哪些内存需要回收?  程序计数器、虚拟机栈、本地方法栈3个区域随线程而生死,所需要的内存大小基本是在编译期间确定下来的,一旦线程或方法结束,内存也就跟着回收了,所以这几个区域不需要过多的考虑垃圾回收问题。但是java堆和方法区只有在程序运行时才能确切的知道需要哪些对象需要多少内存,这部分的内存分配和回收都是动态的,所以这部分内存才是需要垃

2017-04-19 18:20:13

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!