Java高级开发
Java高级开发篇中,主要包含了JVM,多线程,IO以及NIO网络编程类容
狂飙的yellowcong
yellowcong
展开
-
Java之Javassist对类的常用操作小结-yellowcong
用Javassit完了一段时间,感觉挺牛逼的,可以轻松的操作java的字节码文件,这个东西相当于ASM是轻松不少了,对了记得获取已存在类对象的时候,通过类名称com.yellowcong.test.User来获取,而不是通过类对象来获取,因为通过类对象来获取,就会导致加载了两个不同版本的类在JVM中,就会报错原创 2017-09-01 15:39:13 · 1225 阅读 · 0 评论 -
Java之JDK和CGlib实现动态代理-yellowcong
在Java中,对于动态代理,在框架中用到很多,我们可以通过JDK提供的InvocationHandler类实现动态代理,这个方法的缺点是,必须要有接口和实现类,然而Cglib这个工具类,解决了这个问题,可以直接通过类来进行动态代理的操作。Cglib是基于asm的,反射类的生成比较慢,但是方法执行速度块,javaassist可以用来修改字节码,也可以实现aop的操作原创 2017-08-31 11:48:20 · 482 阅读 · 0 评论 -
Java之javassist实现自动代理-yellowcong
Javaassist是通过操作class字节码文件来修改类的,如果需要Javaassist实现AOP,需要用到Javaassist的ProxyFactory、ProxyObject、MethodHandler三个类,通过这种方法就可以so easy的完成了,我们还可以自己写一个AOP的框架,通过Javassit同cglib一样,可以不依赖于接口的方式来实现代理操作原创 2017-09-01 12:02:42 · 1552 阅读 · 1 评论 -
Java之多线程死锁-yellowcong
在Java的多线程中,多个线程共同争夺一个资源的时候,就会照成死锁的问题,为了保证不产生死锁的问题,可以在一个线程中使用一个锁,保证锁的唯一性,这样就可以解决死锁问题原创 2017-10-05 09:40:06 · 396 阅读 · 0 评论 -
Java之多线程中java.util.concurrent.atomic包
这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。实际上是借助硬件的相关指令来实现的,不会阻塞线程(或者说只是在硬件级别上阻塞了)。可以对基本数据、数原创 2017-10-05 15:16:25 · 565 阅读 · 0 评论 -
Java之多线程CountDownLatch 用法 -yellowcong
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。使用的时候,1、conutDown次数达到要求的时候,就会去直接执行await()后的函数,不会在进到while语句进行判断,2、不会像notify和wait方法,需要有锁的情况(等通知的线程完毕后,再去执行notify通知的另外一个线程),才可以接着执行 。原创 2017-10-05 15:45:14 · 522 阅读 · 0 评论 -
Java之多线程AtomicInteger (多人买票) -yellowcong
前几天,通过Thread的同步代码块的方式,写了买票的案例,现在通过AtomicInteger这个类,实现了买票的案例,通过这个类,效率比 通过Thread的同步方法效率高,写多线程的时候,一定要先获取到剩余多少张票,然后做加减法,不然会导致负数票的参生原创 2017-10-05 16:02:46 · 1859 阅读 · 5 评论 -
Java多线程之队列Quene-yellowcong
通过notify和wait实现java的多线程队列模型,主要是控制共同操作的List集合一致性,同时设计了队列的大小,队列有take和push方法,take获取List集合的第一个元素,push添加元素,通过AtomicInteger 实现计数操作原创 2017-10-05 16:56:20 · 497 阅读 · 0 评论 -
Java多线程之单例模式-yellowcong
我们常见的单利模式有饿汉式和懒汉式,懒汉式,就是在用的时候,再实例化对象,饿汉式,是还没有开饭,就已经把对象实例化好了。在多线程开发中,解决单例的时候,有两种解决方案,1、(懒汉式)同步代码块双判断,2、(饿汉式)直接实例化好静态类,调用的时候,直接返回原创 2017-10-05 17:35:58 · 319 阅读 · 0 评论 -
Java多线程之主从设计模式-yellowcong
在Hadoop和Redis等集群的时候,都会有主从的概念,有一个主节点用于控制请求的分发和结果的统计,从节点用于真正的数据处理操作。在多线程中,我们可以把 一个大任务分割成多个小任务,给子节点处理,在这种设计模式中,我们需要使用到原子类 ConcurrentLinkedQueue (用于存储请求提交的任务),和ConcurrentHashMap(用于收集每一个节点获取的结果)。在这种无锁的设计模式中原创 2017-10-06 12:01:44 · 1591 阅读 · 0 评论 -
Java多线程之CountDownLatch的使用
CountDownLatch是java.util.concurrent包下的一个工具类,用于多个线程初始化 操作用的,对于初始化需要多个线程完成,主函数需要等待其他子线程完成,然后进行主函数的逻辑,其中构造函数中,需要传递Integer类型数据,表示需要countDown()执行几次,通常多少个线程初始化操作,就设置为几实际案例中,我们使用Zookeeper,获取连接的情况中,我们让主线程等待,知原创 2017-10-06 16:09:01 · 433 阅读 · 0 评论 -
Java多线程之CyclicBarrier用法-yellowcong
1、CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。 2、CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。3、CyclicBarrier初始时还可带一个Runnable的参数原创 2017-10-06 16:24:34 · 433 阅读 · 0 评论 -
Java多线程之Semaphore用法-yellowcong
Semaphore翻译成字面意思为 信号量,Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。通常Semaphore的作用类似于锁,它一般用于控制对某组资源的访问权限。原创 2017-10-06 16:39:13 · 358 阅读 · 0 评论 -
Java多线程之ReentrantLock使用-yellowcong
ReentrantLock是synchronized的替代,但是实现机制更加的复杂,以更加精确的对锁控制。ReentrantLock 的构造函数中原创 2017-10-06 17:41:21 · 450 阅读 · 0 评论 -
Java网络编程之BIO(Socket)-yellowcong
现在流行NIO网络编程,比较火的框架有Netty和Mina,这个地方我实现传统Socket编程,每一个请求,都会为之创建一个线程来进行处理操作,在Socker数据传输中,用到了PrintWrite,需要注意println()和write()两个方法的区别,println()是带有回车符号的些数据,而write()没有回车符的些数据,需要手动加上回车符,不然消息发送不过去,因为回车符是消息结束的标志,原创 2017-10-07 10:13:26 · 1007 阅读 · 0 评论 -
Java网络编程之BIO(Socket 伪异步)-yellowcong
上一篇Java网络编程之BIO(Socket)-yellowcong写到,客户端,每次发送一个请求,就会创建一个线程的方式来完成请求的处理,效率低下,可以通过添加线程池的方式来解决处理瓶颈问题案例线程池定义个线程池,ThreadPoolExecutor ,使用的是ArrayBlockingQueue 固定长度队列,通过线程池来添加请求的队列,如果请求操过了poolSize,就会将数据放到队列中。原创 2017-10-07 11:01:59 · 440 阅读 · 0 评论 -
Java网络编程之NIO(ServerSocketChannel/SocketChannel)-yellowcong
NIO编程中,需要知道的的重要概念 通道(Channel,封装的Socket)、缓冲区(ByteBuffer等类,用于服务端和客户端数据传递)、选择器(Selector,用于处理Channel)。NIO处理时异步非阻塞的IO,NIO(只有Selector的一个线程,不断轮询处理Channel)效率比BIO高很多(BIO是一个请求一个线程)。NIO中常用的框架有Netty和Mina。原创 2017-10-07 14:00:48 · 758 阅读 · 0 评论 -
Java网络编程之Netty入门案例-yellowcong
Netty入门案例,讲解Netty的客户端 和服务器端的实现,Netty是NIO框架,同类型的还有Mina,不过Netty的使用,比Mina更容易简单。Netty国内的入门案例:http://ifeve.com/netty5-user-guide/Netty的系统架构中,实现了Http,SSL,google Protobuf,websocket的协议。原创 2017-10-08 09:28:43 · 592 阅读 · 0 评论 -
Java网络编程之Netty服务端ChannelOption.SO_BACKLOG配置-yellowcong
ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,函数listen(int socketfd,int backlog)用来初始化服务端可连接队列,服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理,backlog参数指定了队列的大小原创 2017-10-08 09:47:55 · 13862 阅读 · 2 评论 -
Java网络编程之Netty拆包和黏包-yellowcong
Netty中,解决拆包和黏包中,解决方式有三种 1、在每个包尾部,定义分隔符,通过回车符号,或者其他符号来解决 2、通过定义每个包的大小,如果包不够就空格填充 3、自定义协议的方式,将消息分为消息头和消息体,在消息头中表示出消息的总长度,然后进行逻辑处理。案例这个案例是通过第一种方式,通过回车符号的方式来解决拆包和黏包,通过在childHandler 中添加 指定的分隔符进行拆包原创 2017-10-08 10:38:39 · 871 阅读 · 0 评论