java
文章平均质量分 89
zl_momomo
杂记博客 相互学习
展开
-
动态代理-JDK和Cglib实现
动态代理一、JDKJDK实现动态代理类,被代理的类需实现接口。自动生成的代理类也会实现该接口。定义接口package com.test;public interface User { public void talk(); public void run();}被代理类package com.test;public class UserImpl implements User{原创 2016-11-30 21:42:47 · 228 阅读 · 0 评论 -
Java并发之同步 —— volatile关键字及原子性、可见性、有序性
前言在理解volatile前,先理解原子性、可见性、有序性原子性:操作的不可分割性。如++count 实际上是可以分割的三个独立操作,读取->修改->写入,其结果依赖之前的状态,所以并非原子性可见性:一个线程修改了对象状态后, 其他线程能够看到发生的状态变化 "可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。在单线程环境中,如果向某个变...原创 2018-08-02 11:54:09 · 772 阅读 · 0 评论 -
Java并发之Callable与Future
介绍从Runnable开始Runnable@FunctionalInterfacepublic interface Runnable { public abstract void run();}Runnable接口封装一个异步的任务,但缺点是,方法不能返回任务执行结果以及向外抛出异常,而Callable接口解决了这两个问题,可以使用Callable封装异步任务...原创 2018-08-20 16:54:35 · 236 阅读 · 0 评论 -
Java并发之线程安全与无状态对象理解
高并发访问会出现线程安全问题线程安全多线程访问某个状态变量和单线程访问执行结果相同,但效率更高。要编写线程安全的代码,其核心问题要对状态访问操作进行管理,特别是对共享的(多个线程同时访问)和可变的(生命周期内变化)状态的访问。对象的状态"从非正式的意义上来说,对象的状态是指存储在状态变量(例如实例或静态域)中的数据" 本质上是对象内的属性,如属性status,更广义讲是...原创 2018-08-31 11:40:28 · 585 阅读 · 0 评论 -
Java并发之阻塞队列BlockingQueue —— 线程合作
前言当试图向队列添加元素而队列已满, 或是想从队列移出元素而队列为空的时候, 阻塞队列(blocking queue ) 导致线程阻塞。在协调多个线程之间的合作时,阻塞队列是一个有用的工具。工作者线程可以周期性地将中间结果存储在阻塞队列中。其他的工作者线程移出中间结果并进一步加以修改。方法 正常动作 特殊情况下的动作 add 添加一个元素 如果队列满,则抛...原创 2018-09-06 15:33:28 · 344 阅读 · 0 评论 -
Java8 Stream 流库 (二)
stream API 简单应用1.循环list List<String> list = Lists.newArrayList(); //Lists 是一个工具类 类似还有Maps list.add("a"); list.add("b"); list.add("c"); list.add("d"); ...原创 2018-10-25 15:21:13 · 206 阅读 · 0 评论 -
Java8 Lambda表达式 (一)
前言java8中有两个最值得学习的特性,Lambda表达式和Stream API定义:Lambda表达式是一种简洁的语法定义代码块,可以在以后执行一次或多次。由来:在此之前,在 Java 中传递一个代码段并不容易, 不能直接传递代码段 。Java 是一种面向对象语言,所以必须构造一个对象,这个对象的类需要有一个方法能包含所需的代码。java8通过lambda表达式来支持函数式编程。...原创 2018-10-24 17:26:31 · 237 阅读 · 0 评论 -
Java并发之CAS机制 —— 乐观锁
引入在单实例(一个JVM)环境下,多个线程并发操作某一共享资源时,我们可以通过synchronized同步锁保证资源的可见性和原子性。但会存在性能问题:(Synchronized关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁资源后恢复为RUNNABLE状态,这个过程中涉及到操作系统用户模式和内核模式的转换,代价比较高。尽管Java1.6为Synchronized做...原创 2018-11-09 15:15:43 · 527 阅读 · 0 评论 -
Java并发之执行器 —— 线程池ThreadPool
优势构建一个新的线程是有一定代价的, 因为涉及与操作系统的交互。如果程序中创建了大量的生命期很短的线程,应该使用线程池 减少并发线程的数目Executors执行器( Executors) 类有许多静态工厂方法用来构建线程池方法 描述 newCachedThreadPool 必要时创建新线程;空闲线程会被保留 60 秒 newFixedThreadPool...原创 2018-08-06 14:59:19 · 330 阅读 · 0 评论 -
Java并发之执行器 ——Fork-Join框架
前言Fork-Join将一个大任务分解成多个子任务,分别进行处理,最后再将处理结果合并。 双端队列与工作密取(Work Stealing)Fork-Join用到的模式 -工作密取Java6 增加了两种容器类型,Deque (发 音 为 “deck”)和 BlockingDeque, 它们分别对 Queue和 BlockingQueue进行了扩展。Deque是一个双端队列,实现了...原创 2018-08-09 13:56:52 · 453 阅读 · 0 评论 -
模拟JDK动态代理
模拟JDK动态代理一、需求代理Tank类,计算Tank类中方法的执行时间。 因此我们需要在方法执行的前后加上计算逻辑方法二、方案接口package com.proxy.dynamic;public interface Moveable { void move();}代理类package com.proxy.dynamic;import java.util.Random;public cl原创 2016-11-30 22:47:50 · 243 阅读 · 0 评论 -
JAVA 并发之同步器 —— 信号量Semaphore
前言概念临界资源(临界区) 指一次只能允许一个进程使用的共享资源称为临界资源 同步 指为完成某种任务而建立的两个和多个进程,这些进程在合作的过程中需要协调工作次序进行有序的访问而出现等待所产生的制约关系 互斥 指两个或多个进程访问临界资源时只能一个进程访问,其他进程等待的一种相互制约的关系 信号量 本身是一个计数器,使用P,V两个操作来实现计数的减与加,...原创 2018-08-02 17:06:52 · 1357 阅读 · 0 评论 -
synchronized 使用问题(一) 多个synchronized方法执行
同一个类中有两个方法都使用synchronized修饰时,会出现什么问题呢?package com.java.thread;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import ...原创 2018-07-25 10:34:42 · 1606 阅读 · 0 评论 -
Java并发之同步 —— 锁对象与条件对象(ReentrantLock 、ReentrantReadWriteLock、Condition)
I.锁对象有两种机制防止代码受并发访问的干扰。Java语言提供一个 synchronized 关键字达 到这一目的,并且 Java SE 5.0 引入了 ReentrantLock 类。i.ReentrantLock 重入锁private ReentrantLock lock = new ReentrantLock();public void transfer(){ ...原创 2018-07-25 12:02:00 · 592 阅读 · 0 评论 -
Java并发之同步 —— synchronized 关键字及wait,notify使用
前言: 从java 1.0开始,java中的每一个对象都有一个内部锁。如果一个方法使用synchronized关键字声明,那么对象的锁将保护整个方法。也就是说,要调用该方法,线程必须获得对象的内部锁。 内部的对象锁只有一个相关条件。wait方法添加一个线程到等待集中,notifyAll/notify方法解除等待线程的阻塞状态。换句话说,等价于 intrinsicCond...原创 2018-07-25 14:37:28 · 522 阅读 · 0 评论 -
Java8函数式编程 —— CompletableFuture
前言可完成的Future对于1.5提供的Future接口。有一定的局限性,很难直接表述多个future之间的依赖性。比如对于结果的获取只能通过阻塞或者轮询的方式获得,这违背了异步编程的初衷。下面通过一个简单的例子说明CompletableFuture的使用。例子将List中元素,异步方式全部小写转大写 List<String> list = ne...原创 2018-11-26 15:52:13 · 935 阅读 · 0 评论