• NIO的一些知识点

    NIO的一些知识点

    学习 NIO有一段时间了,今天主要总结下什么是 NIO,以及 NIO 的三大组件Buffer、Channel、Selector以及其他相关概念。 NIO传统 BIO 和 NIO最大的区别在于 NIO 是非阻塞的,阻塞和非阻塞的区别在于线程得到返回结果前是否可以做其他事情,阻塞是不可以的,非阻塞可以。 举个例子:一个餐厅里客人来了后要有服务员对客人进行服务,BIO是每来一个客人都得有一个服务员...
  • 自己动手用 Redis 撸一个分布式锁

    自己动手用 Redis 撸一个分布式锁

    什么是分布式锁?分布式锁,是控制分布式系统之间同步访问共享资源的一种方式,在分布式环境中,如果不同的系统或是同一系统的不同服务器之间共享了某些资源,那么访问这些资源的时候需要互斥防止彼此干扰,以此来保证数据一致性,由于单机环境的 Lock 和 synchronize 等锁在分布式环境中不可用,这时候需要用到分布式锁,如秒杀场景。 分布式锁特点: 高可用、高性能地获取锁和释放锁 具备锁可重入特...
  • ThreadLocal是什么鬼?

    ThreadLocal是什么鬼?

    前言之前写过一篇关于[SimpleDateFormat线程安全问题](link: http://zhengyk.cn/2017/10/31/java/Thread_sdf/)的记录博客,里面提到了使用 ThreadLocal 来保证 SimpleDateFormat 线程安全,这是一种比在每个方法里都 new SimpleDateFormat更优雅的方式,当然现在操作时间推荐使用 joda-...
  • 线程池的理解、分析

    线程池的理解、分析

    前言前阵子看唯品会开发指南VJTools关于多线程开发这块儿,在开发中,为了保护线程资源,建议不要自己创建线程,因为线程的创建和销毁是很耗费资源的操作,直接 new 再 start 可能会无限制新建线程,为了更好地管理、利用线程资源可以将一些线程进行池化,也就是线程池。 线程池线程池和连接池原理类似,其核心思想就是提前准备好一些资源放到一个池子里,大家用的时候从池子中取,不用了就放回池子还可...
  • ConcurrentHashMap那些事儿

    ConcurrentHashMap那些事儿

    今天回顾总结下ConcurrentHashMap的一些东西,众所周知,HashMap 不是线程安全的,而ConcurrentHashMap 是线程安全的,所以前阵子总结完多线程的相关知识点后再分析 ConcurrentHashMap 就会轻松很多。 ConcurrentHashMapConcurrentHashMap在jdk7和jdk8中的实现是不同的。 在jdk7中 ConcurrentH...
  • 原子类 AtomicInteger

    原子类 AtomicInteger

    前言当多线程更新某个共享变量时,可能会出现非预期结果,比如i++这样的操作,解决的办法有使用synchronized 或者 Lock 锁,但这样做其实让多线程不会同时更新这个变量,虽然线程安全了,但存在效率、性能问题。 jdk1.5提供了一系列原子操作类,它们存在于java.util.concurrent.atomic包下,这些原子类具有简单、性能高效、线程安全的优点。 代码示例123456...
  • BlockingLock 阻塞队列

    BlockingLock 阻塞队列

    阻塞队列BlockingQueueBlockingQueue 是一个接口,继承自 Queue,Queue继承自 Collection 接口, BlockingQueue插入和移除的4中处理方式: 方法/处理方式 抛出异常 返回boolean 一直阻塞 超时退出 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remov...
  • ReentrantLock那些事儿(二)

    ReentrantLock那些事儿(二)

    接着上篇写,了解了什么是公平锁和非公平锁的概念后,继续分析 ReentrantLock,它使用一个静态抽象类 Sync来管理公平锁和非公平锁: 123abstract static class Sync extends AbstractQueuedSynchronizer { ...} Sync 有两个子类,一个是FairSync,实现了公平锁,另一个是NonfairS...
  • ReentrantLock那些事儿(一)

    ReentrantLock那些事儿(一)

    ReentrantLock 是 Lock 的一个子类,和 synchronize 一样称之为可重入锁,它有着和 synchronize 同样的内存语义,但功能比 synchronize 功能更多,使用起来更为灵活。 可重入锁:能够支持对资源的重复加锁,一个典型例子就是同一个类的 synchironized 方法内可以调用本类其他的 synchronize 方法。 使用 Reentrant...
  • Lock And AQS

    Lock And AQS

    锁是用来控制多线程访问共享资源的一种方式,一般情况下,锁可以防止多个线同时访问共享资源,但有些锁可以允许多个线程并发地访问共享资源,如读写锁中的读锁。 Lock 接口一般情况下,我们常用 synchronized 关键字来实现锁的功能,前面提到 synchronize 关键字是利用对象监视器来实现同步,synchronize获取锁和释放锁很固定,就是先获取再释放,虽然简便了同步化管理,但是不...
13456712