小白的博客

追求幸福之旅

同步与异步

同步 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去。 异步 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。 实现同步的机制 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意...

CopyOnWrite机制

即写时复制。当我们往一个容器添加元素的时候,不直接添加到容器中,而是先将这个容器复制一份,将元素添加到复制的容器中,再将原容器的引用指向复制的新容器。 这样做的好处是可以并发地读且不用加锁,也是一种读写分离的思想。 试着实现一个CopyOnWriteMap: import java.util.Collection; import java.util.HashMap; import ja...

线程安全的集合类

Hashtable 是一个散列表,其函数是同步的(方发锁),即线程安全的,key和value都不可以是null,映射是无序的。 ConcurrentHashMap HashMap的线程安全版,主要使用代码块锁,因此效率上比Hashtable有较大的提升。 CopyOnWriteArrayList和CopyOnWriteArraySet 使用ReentrantLock的加锁和解锁方法,是一...

死锁、volatile、原子操作

死锁 当两个线程/逻辑都在等待对方释放锁的时候,就会造成死锁,现象就是程序无法继续执行。 举个例子,张三有一笔巨款,李四有个珍宝,张三必须等李四先把珍宝亲自交由手上才会付款,而李四必须先收到巨款才能奉上珍宝,由于条件限制无法做到同时交钱交货,就会造成双方僵持不下。 volatile关键字 告诉编译器这个变量是易变的、不稳定的,不要试图对该变量进行缓存等优化机制,每次都应从内存地址中读取值...

HTTP缓存机制

问题 以下为 page.html 内容: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>p...

显式锁与其实现

Lock Lock是一个接口,提供了无条件的、可轮询的、定时的、可中断的锁获取操作,所有加锁和解锁的方法都是显式的。核心方法: void lock()获取锁。如果锁不可用,出于线程调度的目的,将禁用当前线程,且在获取锁之前,该线程都将处于休眠状态。 boolean tryLock()仅在调用时,锁为空闲状态才获取该锁。如果锁可用,则获取锁,并立即返回true;如果锁不可用,则立即...

Java锁机制与synchronized隐式锁

锁机制 一段多线程代码在执行的过程中,在操纵对象的地方,必须有个执行的顺序。每一个对象对应一个锁,线程要想对该对象进行操作,首先要获得这个锁,如果执行过程中锁被其它线程拿走,就会进入阻塞状态;又或者线程顺利执行完毕后,会把锁归还对象,此时线程池中的某个线程就可以获取该锁并执行相应的代码了。 synchronized隐式锁 在方法或者代码块前声明关键字synchronized,就可以起到同步...

线程副本

线程副本为每个使用该变量的线程提供一个独立的变量副本,即多个线程操作同一个变量,互相不会影响对方的值。 void set()设置当前线程的线程副本的值 public T get()返回当前线程拥有的线程副本的值 public void remove()将该线程的线程副本的值删除。需要注意的是该方法不是一定要显式调用的,当线程结束后,Java的垃圾回收机制也会起作用,但是显式调...

IOC(控制反转)与DI(依赖注入)

IOC IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好IOC呢?理解好IOC的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下: ●谁控制谁,控制什么:传统Java SE程序...

Java实现线程的几种方式

继承Thread,覆盖run()方法 public class ThreadA extends Thread { @Override public void run(){ super.run(); try { Thread.sleep(5000L); } catch (InterruptedExcepti...