自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Vision

平凡,是为了最美的荡气回肠!

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

原创 14 并发Queue

1.1 并发Queue在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 1.2 ConcurrentLinkedQueueConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发下的高性能,通常Concurren...

2018-06-29 14:08:52 231

原创 13 ConcurrentMap & Copy-On-Write容器

1.1 ConcurrentMapConcurrentMap接口有两个实现类:ConcurrentHashMapConcurrentSkipListMap(支持排序功能,弥补ConcurrentHashMap)ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的HashTable,他们有自己锁。只要多个修改操作发生在不同的段上,他们就可以并发进...

2018-06-29 14:07:07 243

原创 12 同步类容器&并发类容器

1.1 同步类容器同步类容器都是线程安全的,但是在某些场景下可能需要加锁来保护复合操作,复合类操作如:迭代(反复访问元素,遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能就表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由...

2018-06-29 14:04:37 156

原创 11 单例&多线程

单例模式,最常见的就是饥饿模式,和懒汉模式,一个直接实例化对象一个调用方法时进行实例化对象。在多线程模式中,考虑到性能和线程安全问题。我们一般选择下面两种比较经典的单例模式,在性能提高的同时,又保证了线程安全。饿汉式没有线程安全问题,懒汉式需要双重锁定解决可能的线程安全问题,下面是对懒汉模式实现线程安全的方法。饿汉式的缺点是类一加载就实例化,提前占用系统资源Doubble check instan...

2018-06-28 14:57:24 255

原创 10 ThreadLocal

ThreadLocal概念:线程局部变量,是一种多线程间并发访问量的解决方案,与其synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立剧本,有保障线程安全。从性能上说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景,使用...

2018-06-28 14:35:31 170

原创 09 使用wait/notify模拟Queue

BlockingQueue:顾名思义,首先它是一个队列,并且支持阻塞的机制,阻塞的放入和得到数据。我们要实现LinkedBlockingQueue下面两个简单的方法put和take。Put:把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻塞,直到BlockingQueue里面有空间再继续。Take:取走BlockingQueue里排在首位...

2018-06-28 14:34:30 192

原创 08 线程之间通信

2.1 线程之间通信线程之间概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高cpu利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把握与监督。 使用wait/notify方法实现线程间的通信。(注意这个两个方法都是object的类的方法,换句话说java为所有的对...

2018-06-28 14:31:44 127

原创 07 volatile关键字的概念

Volatile概念:volatile关键字的主要作用是使变量在多个线程见可见。 Volatile存在原因:   在没有volatile之前是利用加锁机制,从而保证线程安全,数据的一致性,但是这样的效率比较低,因为每次操作只有一个线程执行。 示例:package edu.sdut.thread01; public class MyThread09 extends Thread {/**volati...

2018-06-27 20:32:44 149

原创 06 synchronized代码块

使用synchronizd声明的方法在某些情况下是由弊端的,比如A线程调用同步的方法执行一个很长时间的任务,那么B线程就必须等待比较长的时间才能执行,这样的情况下可以使用synchronized代码块去优化代码执行时间,也就是通常所说的减小锁的粒度。 synchronized可以使用任意的Object进行加锁,用法比较灵活:package edu.sdut.thread01; /** * 使用sy...

2018-06-27 20:30:39 160

原创 05 synchronized其他概念

Synchonized锁重入:关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到了一个对象的锁后,再次请求此对象时是可以再次得到该对象的锁。示例:package edu.sdut.thread01; /* * synchronized的重入 */public class MyThread05 {public synchronized void m...

2018-06-27 20:28:59 129

原创 04 脏读

对于对象的同步和异步的方法,我们在设计自己的程序的时候,一定要考虑的问题整体。不然就会出现数据不一致的错误。示例:/** * 业务整体需要完整的synchronized,保证业务的原子性 * @author Vision_TXG * */public class MyThread04 {private String username ="txgang";private String passwor...

2018-06-27 20:27:31 162

原创 03 对象锁的同步和异步

同步:synchronized同步的概念就是共享,如果不是共享的资源就没必要进行同步。异步:asynchronized异步的概念就是独立,相互之间不受任何制约。同步的目的是为了线程安全,其实对于线程安全来说需要满足两个特性:原子性(同步)可见性 示例:/** * 对象锁的同步和异步问题 * @author Vision_TXG * */public class MyThread03 {public...

2018-06-27 20:26:13 155

原创 02 多个线程多个锁

多个线程多个锁:多个线程都可以拿自己指定的锁,分别获得锁之后,执行synchronized方法题内容。 示例:/** * 关键字synchronized获得的都是对象锁,而不是把一段代码(方法)当作锁, * 所以代码中哪个线程先执行synchronized关键字的方法,哪个对象持有该方法所属对象的锁 * @author Vision_TXG * */public class MyThread02 ...

2018-06-27 20:25:14 147

原创 01 线程安全

线程安全概念:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为。Synchronized:可以在任意对象及方法上枷锁,而加锁的这段代码成为“互斥区”或“临界区”。示例:(在run方法上加锁)public class MyThread01 extends Thread{private int count = 5;//不加synchronized加锁public  void ru...

2018-06-27 20:23:06 138

空空如也

空空如也

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

TA关注的人

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