自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sifanchao的博客

什么都有比什么都没有更可怕!只有肯用心、持之以恒,就走在成功的路上。

  • 博客(15)
  • 收藏
  • 关注

原创 线程池

概念Java中的线程池(juc包下)是运用场景多的并发框架,几乎所有需要异步或者并发执行任务的程序都可以使用线程池。使用线程池的有三个优点:降低资源的消耗:通过重复利用已创建的线程降低线程创建和销毁带来来的消耗提高响应速度:当新任务到达时,任务可以不需要等待线程创建就可以立即执行提高线程的可管理性:使用线程池可以统一进行线程分配、调度与监控线程池的实现原理当一个Runnabl...

2018-11-24 20:35:23 183

原创 Condition的await和signal等待/通知机制

Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如 wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制。同样的, 在 java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来...

2018-11-24 17:50:17 320

原创 读写锁ReentranReadWriteLock

读写锁简介在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用java提供的关键字 synchronized或者concurrents包中实现了Lock接口的ReentrantLock。它们都是独占式获取锁,也就是在同一时刻只有一个线程能够获取锁。而在一些业务场景中,大部分只是读数据,写数据很少,如果仅仅是读数据的话并不会影响数据正确性(出现脏读),而如果在这种业务场...

2018-11-23 21:17:53 822

原创 ReentrantLock

ReentrantLock介绍ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。java关键字synchronized隐式支持重入性,synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。...

2018-11-22 22:03:10 143

原创 AQS详解

AQS简介在同步组件的实现中,AQS是核心部分,同步组件的实现者通过使用AQS提供的模板方法实现同步组件语义。AQS 则实现了对同步状态的管理,以及对阻塞线程进行排队,等待通知等等一些底层的实现处理。AQS的核心也包括了这些方面:同步队列,独占式锁的获取和释放,共享锁的获取和释放以及可中断锁,超时等待锁获取这些特性的实现,而这些实际上则是AQS提供出来的模板方法。同步队列当共享资源被...

2018-11-22 16:18:02 18888 4

原创 Lock体系

Lock简介锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。在Lock接口出现之前,java程序主要是靠synchronized关键字实现锁功能的,而JDK5之后,并发包中增加了lock接口,它提供了与synchronized一样的锁功能。虽然它失去了像synchronize关键字隐式加锁解锁的便捷性,但是却拥有了锁获取和释放的可操作性,可中断的获取锁以...

2018-11-22 13:48:13 443

原创 synchronized优化

序言在JDK1.5中,synchronized是性能低效的。因为这是一个重量级操作,它对性能大的影响是阻塞的是实现,挂起 线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性带来了很大的压力。相比之下使用Java 提供的Lock对象,性能更高一些。import java.util.concurrent.locks.Lock;import java.util.concurrent...

2018-11-16 18:41:07 5385 2

原创 synchronized 同步

同步问题的引出需求:多个线程同时卖票class MyThread implements Runnable { private int ticket = 10; @Override public void run() { while (this.ticket > 0) { try { ...

2018-11-14 19:54:13 996

原创 多线程常用操作

线程命名与取得多线程的运行状态是不确定的,所以对于多线程操作必须有一个明确标识出线程对象的信息,这个信息往往通过名称来描述。在Thread类中提供有如下的线程名称方法:class MyThread implements Runnable { @Override public void run() {}}public class TestThread { publi...

2018-11-14 15:15:57 622

原创 多线程的实现

继承Thread类实现多线程java.lang.Thread是一个线程操作的核心类。新建一个线程简单的方法就是直接继承Thread类,而后覆写该类中的 run()方法(就相当于主类中的main方法)package www.bit.java;class MyThread extends Thread { private int ticket = 100; @Override...

2018-11-12 14:46:23 186

原创 方法引用

从最初开始,只要是进行引用都是针对于引用类型完成的,也就是只有数组、类、接口具备引用操作。但是JDK1.8 开始追加了方法引用的概念。实际上引用的本质就是别名。所以方法的引用也是别名的使用。而方法引用的类型有四种形式:引用静态方法:类名称::static 方法名称@FunctionalInterfaceinterface IUtil<R,N> { R switchPara...

2018-11-07 21:25:56 569

原创 Lambda表达式和接口增强

Lambda表达式Lambda是JDK1.8推出的重要新特性。很多开发语言都开始支持函数式编程,其中最具备代表性的就是haskell。函数式编程和面向对象编程可以理解为两大开发阵营。很多人认为面向对象的概念过于完整,结构操作不明确。我们编写一个简单的加法程序为例当我们如果不仅使用x+y方法时,比如说想扩展x+y+10方法时,我们会发现,我们需要像函数重载一样编写多个函数。packag...

2018-11-07 20:24:01 186

原创 注解

@Override 准确覆写当子类覆写父类方法时,此注解检查覆写的方法是否正确声明,只有满足覆写方法要求才会编译通过,否则编译报错。class Person { @Override public String toString(){ return "hello world"; }}public class MyEnum { public st...

2018-11-07 17:21:36 126

原创 枚举

如果此时需要定义一个描述颜色基色的多例类。我们通过多例模式实现。多例设计模式特点:构造方法私有化,类内部需要提供若干个实例化对象,后面通过statica方法返回。package www.bit.java;class Color { private String title; public static final int RED_FLAG = 1 ; public ...

2018-11-07 16:59:50 126

原创 双向链表设计

interface ILink { /** * 链表增加节点操作 * @param data 节点内容 * @return */ boolean add(Object data); /** * 判断指定内容节点在链表中是否存在 * @param data 要判断的内容 * @return 返回找到的...

2018-11-02 20:49:02 347

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除