Java并发编程
文章平均质量分 63
墨丶亦轩
这个作者很懒,什么都没留下…
展开
-
【Java基础】线程笔记——多线程交互:线程阀
线程阀是线程与线程之间相互制约和交互的一种机制基础概念Queue:保存一组元素,采用FIFO(先进先出)原则Deque:保存一组元素,采用先进后出原则(栈结构),双端队列主要用于栈操作阻塞队列:支持两个附加操作的队列。队列中元素为空时,获取元素的线程会等待队列变成非空;队列元素满时,存储元素的线程会等待队列变成可用(常用于生产者和消费者场景)。生产者往队列添加元素。消费者取出队列元素。阻塞原创 2017-03-27 18:03:16 · 469 阅读 · 0 评论 -
【Java基础】线程笔记——线程安全
线程不安全 线程操作一个数据结构出现修改和串行的情况,没有保证数据的一致性 典型例子:在实际开发中项目service和servlet都是单实例共享变量,极易出现多个用户数据串掉的情况,从而导致数据出错public class ThreadA extends Thread{ private Count count; public ThreadA(Count count){原创 2017-03-24 14:15:24 · 182 阅读 · 0 评论 -
【Java基础】线程笔记——显式锁Lock和ReentrantLock
Lock Lock是一个接口提供了无条件的、可轮询的、定时的、可中断的获取锁操作包路径import java.util.concurrent.locks.Locklock() //获取锁,如果线程不可用,将禁用当前线程,并且在获取锁之前,该线程一直处于休眠状态lockInterruptibly() //如果当前线程未被中断,获取锁;如果锁可用,获取锁tryLock() //仅在锁为空闲状态原创 2017-03-24 16:50:12 · 263 阅读 · 0 评论 -
【Java基础】线程笔记——显式锁StampedLock
首先了解悲观锁和乐观锁概念 悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作 读取悲观锁:在读取之前先判断以下,数据有无修改。 乐观锁:假设不会发生并发冲突,只在提交操作前检查是否违反数据完整性的操作 读取乐观锁:在读取之前不需要判断数据是否被修改,只需读取自己的数据StampedLock StampedLock是基于能力的锁,很好的实现悲观锁和乐观锁的逻辑。原创 2017-03-24 17:39:12 · 390 阅读 · 0 评论 -
【Java基础】线程笔记——synchronized
synchronizedpublic class ThreadA extends Thread{ private Count count; public ThreadA(Count count){ this.count = count; } @Override public void run() { count.add();原创 2017-03-24 15:24:47 · 204 阅读 · 0 评论 -
【Java基础】线程笔记——原子操作:atomic
atomic不会阻塞线程。是加强版的volatile原子操作。主要用于高并发环境高效程序处理了解volatile修饰变量易变的、不稳定的从内存种获取值读取/写入不需要锁提供了内存可见性,但是没提供原子性。不适用高并发场景volatile与加锁机制主要的区别:前者只提供了内存可见性。后者还提供了原子性atomic处理类java.util.concurrent.atomic基本类: At原创 2017-03-27 11:03:16 · 251 阅读 · 0 评论 -
【Java基础】线程笔记——线程安全的单例模式的写法
线程安全,高并发性能不高public class SingletonOne { private static SingletonOne instance; private static ReentrantLock lock = new ReentrantLock(); private SingletonOne(){ } public static SingletonOn原创 2017-03-27 11:07:22 · 251 阅读 · 0 评论 -
【Java基础】线程笔记——线程安全集合类
HashTableConcurrentHashMapCopyOnWriteHashTableHashTable特点 1. 和HashMap都是散列表,储存键值对映射 2. 继承Dictionary、实现Serializable、Clone、Map接口 3. 初始容量(哈希表创建容量)和加载因子(哈希表中桶的数量),是影响性能的关键因素。默认加载因子0.75 4. 哈希表的方法都是同步的原创 2017-03-27 11:53:14 · 298 阅读 · 0 评论 -
【Java基础】线程笔记——ThreadApi
线程的中断机制第一种方法: Thread.stop() (已废弃) 【缺点】线程不安全,已不再使用第二种方法: Thread.interrupt()当一个线程运行时,另一个线程可以调用对应的 Thread 对象的 interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。如果只是单纯的调用 interrupt()方法,线程并没有实际被中断,会继续往下执行原创 2017-03-24 13:42:15 · 224 阅读 · 0 评论 -
【Java基础】线程笔记——创建线程的3种方式
最直接——继承Thread类public class ThreadA extends Thread { @Override public void run() { try { Thread.sleep(500L); } catch (InterruptedException e) { e.printStack原创 2017-03-24 10:49:37 · 212 阅读 · 0 评论 -
【Java基础】线程笔记—— 线程池
什么是线程池?目的:减少对象创建和销毁的时间 Java线程池实现Java高并发、Java多线程、可管理的统一调度器 Executors是线程的工厂类(工具类):方便快速的创建线程池创建线程池常见的3种方法newSingleThreadExecutor 创建单线程的线程池 newFixedThreadPool 创建固定大小的线程池 newCachedThreadPool 创建可缓存线程原创 2017-03-28 11:31:47 · 252 阅读 · 0 评论 -
【Java基础】线程笔记—— Fork/Join
JDK7的Fork/Join思想:化繁为简、分而治之、递归的分解和合并,直到任务小到可以接收的程度 目的:并行执行任务的框架Future任务机制和FutureTaskFuture就是对具体的Runnable和Callable的执行结果进行取消、查询是否完成、获取结果 1.判断任务是否完成 2.是否中断任务 3.能够获取任务执行结果 FutureTask是Future的实现类原创 2017-03-28 11:49:10 · 404 阅读 · 0 评论 -
【Java基础】线程笔记——可重入内置锁
每个 Java 对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁 获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果摸个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功“重入”意味着获取锁的操原创 2017-03-28 14:10:55 · 246 阅读 · 0 评论 -
【Java基础】线程笔记——死锁
当线程需要同时持有多个锁时,有可能产生死锁 线程 A 当前持有互斥所锁 lock1,线程 B 当前持有互斥锁 lock2。接下来,当线程 A 仍然持有 lock1 时,它试图获取 lock2,因为线程 B 正持有 lock2,因此线程 A 会阻塞等待线程 B 对 lock2 的释放。如果此时线程 B 在持有 lock2 的时候,也在试图获取 lock1,因为线程 A 正持有 lock1,因此线程原创 2017-03-28 15:15:18 · 170 阅读 · 0 评论 -
【Java基础】线程笔记—— 线程协作
在 Java 中,可以通过配合调用 Object 对象的 wait() 方法和 notify()方法或 notifyAll() 方法来实现线程间的通信。在线程中调用 wait() 方法,将阻塞等待其他线程的通知在线程中调用 notify() 方法或 notifyAll() 方法,将通知其他线程从 wait() 方法处返回 Object 是所有类的超类,它有 5 个方法组成了等待/通知机制的核心:原创 2017-03-28 16:00:15 · 175 阅读 · 0 评论 -
【java基础】线程笔记——LockSupport
LockSupportLocalSupport类特性不可实例化private LockSupport() {} // Cannot be instantiated.LockSupport的方法都是静态方法私有变量 private static final sun.misc.Unsafe UNSAFE; private static final long parkBlocker原创 2017-04-10 09:45:02 · 503 阅读 · 0 评论 -
【java基础】线程笔记——AQS(AbstractQueuedSynchronizer)
AQS : java.util.concurrent.locks.AbstractQueuedSynchronizer 研究java.util.concurrent并发包的突破口(例如: ReentrantLock核心是内部类Sync,然而Sync继承AQS)AQS核心 通过一个共享变量来同步状态,变量的状态由子类去维护,线程阻塞队列的维护线程阻塞和唤醒 共享变量的修改都是通过U原创 2017-04-10 11:07:30 · 281 阅读 · 0 评论 -
【java基础】 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO
PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。DO(Domain Obje转载 2017-04-06 15:59:25 · 258 阅读 · 0 评论