Executor框架(一)Executor框架简介

Executor框架简介Executor框架的两级调度模型  在HotSpot VM的线程模型中,Java线程被一对一映射为本地操作系统线程。Java线程启动时会创建一个本地操作系统线程;当Java线程终止时,这个操作系统线程也会被回收。操作系统会调用所有线程并将他们分配给可用的CPU。   可...

2017-12-10 21:36:59

阅读数 192

评论数 0

并发工具类(五) Phaser类

前言  JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch、CyclicBarrier、Semphore、Exchanger、Phaser;   CountDownLatch、CyclicBarrier、Semphore、Ph...

2017-12-04 03:23:18

阅读数 115

评论数 0

并发工具类(四)线程间的交换数据 Exchanger

前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch、CyclicBarrier、Semphore、Exchanger;   CountDownLatch、CyclicBarrier、Semphore 这三个工具类提...

2017-12-03 16:14:38

阅读数 130

评论数 0

并发工具类(三)控制并发线程的数量 Semphore

前言  JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch、CyclicBarrier、Semphore、Exchanger; CountDownLatch、CyclicBarrier、Semphore 这三个工具类提供一种并...

2017-12-03 14:55:01

阅读数 434

评论数 0

并发工具类(二)同步屏障CyclicBarrier

前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch、CyclicBarrier、Semphore、Exchanger; CountDownLatch、CyclicBarrier、Semphore 这三个工具类提供一...

2017-11-30 01:47:12

阅读数 141

评论数 0

并发工具类(一)等待多线程完成的CountDownLatch

前言  JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch、CyclicBarrier、Semphore、Exchanger; CountDownLatch、CyclicBarrier、Semphore 这三个工具类提供一种并发...

2017-11-15 01:50:34

阅读数 139

评论数 0

显式锁(四)--- Lock的等待/通知机制Condition

任意一个Java对象,都拥有一组监视器方法(定义在根类Object上),主要包括:wait( )、wait(long timeout)、notify()、notifyAll()方法;这些方法与关键字synchronized结合使用,可以实现 隐式锁的等待/通知机制。而显示锁Lock也实现了等待/通...

2017-11-14 23:43:13

阅读数 131

评论数 0

显式锁(三) -- 读写锁ReadWriteLock

前言:  上一篇文章,已经很详细地介绍了 显式锁Lock 以及 其常用的实现方式- - ReetrantLock(重入锁),本文将介绍另一种显式锁 - - 读写锁ReadWriteLock。    前面介绍的隐式锁Synchronize、重入锁ReetrantLock都是互斥锁、独占锁,即同一个...

2017-11-14 11:23:19

阅读数 161

评论数 0

显式锁(二)--- Lock接口与显示锁

一、显式锁简介   显式锁,这个叫法是相对于隐式锁synchronized而言的,加锁和解锁都要用户显式地控制。显示锁Lock是在Java5中添加到jdk的,同synchronized一样,这也是一种协调共享对象访问的机制。但是它不是用来替代内置锁的,而是一种可选择的高级功能。 1、Lock接口...

2017-11-13 17:53:59

阅读数 197

评论数 0

显示锁(一)--- synchronized 的局限性 与 Lock 的优点

转载自 Java 并发:Lock 框架详解 摘要:  我们已经知道,synchronized 是java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 sy...

2017-11-08 21:39:13

阅读数 287

评论数 0

内置锁(三)---- synchronized的几个要注意的对象监视器

前言   经过前面的两篇文章的介绍,可以清楚知道,synchronized可以用于修饰一个方法 或者 代码块,线程要访问这些临界区代码,则要先获取对应的 对象监视器 ,从而使多个线程互斥访问临界区。    然而,区别是不是同一个对象监视器,是根据对象监视器的内存地址是否一样。这就意味着,想要某些...

2017-11-08 00:55:48

阅读数 166

评论数 0

内置锁(二)--synchronized下的等待/通知机制

一、等待/通知机制的简介线程之间的协作:   为了完成某个任务,线程之间需要进行协作,采取的方式:中断、互斥,以及互斥上面的线程的挂起、唤醒;如:生成者–消费者模式、或者某个动作完成,可以唤醒下一个线程、管道流已准备等等; 等待/通知机制:    等待/通知机制 是线程之间的协作一种常用的方...

2017-11-02 10:25:59

阅读数 141

评论数 0

内置锁(一)--- synchronized 介绍与用法

一、synchronized 的介绍  synchronized 是 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码,而这段代码也被称为临界区。  synchronized 有多个叫法,而每个叫法都表明synchronized ...

2017-11-01 23:03:24

阅读数 226

评论数 0

并发基础(七) Thread 类的重要的方法--sleep、yeild、join

1、Thread.sleep(long millis ) sleep( )是一个静态方法,让当前正在执行的线程休眠(暂停执行),而且在睡眠的过程是不释放资源的,保持着锁。 在睡眠的过程,可以被中断,注意抛出InterruptedException异常; 作用: 1、暂停当前线程一段时间; ...

2017-10-22 18:24:18

阅读数 270

评论数 0

并发基础(九) java线程的终止与中断

1、简单了解一下:为何不赞成使用 Thread.stop、Thread.suspend 和 Thread.resume?   suspend 、resume、stop方法分别完成了线程的暂停、恢复、终止的工作。不建议使用原因:是因为这三个方法带来的副作用,如suspend( )方法,调用后,线程...

2017-10-22 17:16:00

阅读数 121

评论数 0

java线程阻塞中断和LockSupport的常见问题

这里仅包含要讨论的几个问题的答案,具体讨论过程查看原文:java线程阻塞中断和LockSupport的常见问题 问题1: Thread.interrupt()方法和InterruptedException异常的关系?是由interrupt触发产生了InterruptedException异常? ...

2017-10-22 15:53:28

阅读数 125

评论数 0

并发基础(八) java线程的中断机制

一、线程中断机制的原理   java中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断。 中断 可以认为是线程之间的一种通信的消息类型,当线程接到了一个中断消息时,怎么处理是线程的控制的,甚至可以不处理,其他线程无法干涉。 在Core Java中有...

2017-10-22 15:09:21

阅读数 146

评论数 0

实现多线程安全的3种方式

1、先来了解一下:为什么多线程并发是不安全的?  在操作系统中,线程是不拥有资源的,进程是拥有资源的。而线程是由进程创建的,一个进程可以创建多个线程,这些线程共享着进程中的资源。所以,当线程一起并发运行时,同时对一个数据进行修改,就可能会造成数据的不一致性,看下面的例子: 假设一个简单的int...

2017-10-18 17:56:24

阅读数 23175

评论数 1

java线程副本--ThreadLocal

一、ThreadLocal 介绍  多线程并发之所以会不安全,就是因为线程不拥有资源,它们共享竞争着进程的资源,这样线程并发起来不安全,一般的解决方案便是用锁,保证每时每刻一个资源最多只能被一个线程拥有。而在java的多线程中,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。 ...

2017-10-17 22:55:09

阅读数 1572

评论数 0

并发基础(六) 线程Thread类的start()和run()

一、start( )方法 1、为什么需要start方法;它的作用是什么; start方法的作用就是将线程由NEW状态,变为RUNABLE状态。当线程创建成功时,线程处于NEW(新建)状态,如果你不调用start( )方法,那么线程永远处于NEW状态。调用start( )后,才会变为RUN...

2017-10-17 21:33:51

阅读数 270

评论数 0

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