java并发编程
afgawrg
这个作者很懒,什么都没留下…
展开
-
java并发编程基础--线程状态及相互转换
一、线程状态 1)Thread源码state,篇幅所限,就省略部分注释 2)转态解释 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):处于可运行状态的线程正在JVM中执行,但它可能正在等待来自操作系统的其他资源,例如处理器。 阻塞(BLOCKE...原创 2019-02-18 14:38:26 · 145 阅读 · 0 评论 -
java并发编程--线程池详细介绍与使用
1、为什么要用线程池 频繁创建线程,销毁线程带来的系统开销非常大,线程池为线程生命周期开销问题和资源不足问题提供了解决方案 2、线程池创建示例 public class ThreadPoolDemo { public static void main(String[] args) throws ExecutionException, InterruptedException { ...原创 2019-02-26 22:30:46 · 272 阅读 · 0 评论 -
java并发编程基础--并发工具类介绍与示例
在JDK的并发包里提供了几个非常有用的并发工具类,主要有以下四个: CountDownLatch、CyclicBarrier、Semaphore、Exchanger 一、CountDownLatch CountDownLatch允许一个线程或多个线程等待其他线程完成操作。 其中,await()方法表示进入等待状态,countDown()方法表示计数器减一 举例:就是田径场可作为长跑也可作...原创 2019-02-26 20:20:44 · 157 阅读 · 0 评论 -
java并发编程基础--容器与LinkedBlockingQueue介绍
一、同步容器与并发容器 1、同步容器 1)类型 :Vector、HashTable--JDK提供的同步容器类 Collections.synchronizedXXX 本质是对相应的容器进行包装 2)缺点:单独使用里面的方法时是线程安全的,但是在复合操作中则需添加额外的锁来保证线程安全 (如在Iterator迭代容器或for-each遍历容器中,需在迭代过程持有容器的锁,但容器...原创 2019-02-26 19:02:58 · 174 阅读 · 0 评论 -
java并发编程基础--原子类与原子更新
一、原子类介绍 1、什么是原子类 原子类可以认为其操作都是不可分割 2、为什么要有原子类 对多线程访问同一个变量,我们需要加锁,而锁是比较消耗性能的,JDk1.5之后,新增的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式,这些类同样位于JUC包下的atomic包下, 发展到JDk1.8,该包下共有17个类,囊括了原子更新基本类型、原子更新数组、原子更新属性、原子更新...原创 2019-02-25 23:39:53 · 1316 阅读 · 0 评论 -
java并发编程基础--线程通信的几种方式简单介绍与部分示例
一、使用wait,notify,notifyAll 1、使用场景:在多线程环境下,有时候一个线程的执行,依赖于另外一个线程的某种状态的改变,这个时候,我们就可以使用wait与notify或者notifyAll 2、注意点: 1)wait与sleep的区别:wait会释放持有的锁,而sleep不会,sleep只是让线程在指定时间内休眠,不去抢占CPU的资源 2)wait ...原创 2019-02-25 22:18:08 · 216 阅读 · 0 评论 -
java并发编程基础--线程安全性介绍及单例(饿汉式懒汉式)介绍
一、线程安全性 1、线程安全性问题成因: 1):多线程环境 2):多个线程操作同一共享资源 3):对该共享资源进行了非原子性操作 2、如何避免线程安全性问题: 1)将多线程改单线程(操作:必要的代码加锁访问) 2)不共享资源(操作:ThreadLocal、不共享、操作无状态化、不可变) 3)将非原子性操作改成原子性操作(操...原创 2019-02-18 22:22:48 · 300 阅读 · 0 评论 -
java并发编程基础--原子性及synchronized和volatile使用
一、原子性 1)什么是原子性? 通俗的来说,原子性就是指一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 2)如何把非原子性操作变成原子性操作? volatile关键字仅仅保证可见性,并不保证原子性 synchronize关键字,使得操作具有原子性 二、synchronize关键字使用场景 1)修饰普通方法:锁住对象实例 如:public...原创 2019-02-18 21:08:28 · 145 阅读 · 0 评论 -
java并发编程基础--线程的挂起、恢复及中断操作
一、线程挂起与恢复 1、在久的JDK版本中,提供了下面两个方法,但目前已经废弃了,Thread源码中都加了@Deprecated注解 thread.suspend() 该方法不会释放线程所占用的资源。如果使用该方法将某个线程挂起,则可能会使其他等待资源的线程死锁 thread.resume() 方法本身并无问题,但是不能独立于suspend()方法存在 2、可以使用的方法: w...原创 2019-02-18 16:55:30 · 898 阅读 · 0 评论 -
java并发编程基础--创建线程的方式
1、继承Thread,并重写父类的run方法 2、实现Runnable接口,并实现run方法 ======================================分割线====================== 实际开发中,比起继承,选择实现Runnable接口这种方式:因为java只允许单继承,但可以实现多个接口,以增加程序的健壮性,代码可以共享,代码跟...原创 2019-02-18 15:18:54 · 114 阅读 · 0 评论 -
java并发编程基础--先行发生原则( happens-before)与指令重排序
一、先行发生原则 happens-before 判断数据是否有竞争、线程是否安全的主要依据 1. 程序次序规则:同一个线程内,按照代码出现的顺序,前面的代码先行于后面的代码,准确的说是控制流顺序,因为要考虑到分支和循环结构。 2. 管程锁定规则:一个unlock操作先行发生于后面(时间上)对同一个锁的lock操作。 3. volatile变量规...原创 2019-02-26 23:47:52 · 427 阅读 · 0 评论