![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 多线程
文章平均质量分 85
Allen215902
GitHub 地址:https://github.com/pzxwhc
知乎地址:https://www.zhihu.com/people/wu-hua-chuan-72
展开
-
Java 多线程:多线程产生的原因
包括:一. Java 内存模型二. i ++ 操作的实质三. Java 多线程产生的原因四. 总结一. Java 内存模型线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM(Java内存模型)的一个抽象概念,并不真实存在。它原创 2015-12-29 00:49:50 · 1901 阅读 · 0 评论 -
Java 多线程:分析线程池的实现原理
前言我们都知道,所谓线程池,那么就是相当于有一个池子,线程就放在这个池子中进行重复利用,能够减去了线程的创建和销毁所带来的代价。但是这样并不能很好的解释线程池的原理,下面从代码的角度分析一下线程池的实现。线程池的相关类在 Java 中,有几个接口,类 值得我们关注:ExecutorExecutorServiceAbstractExecutorServiceThreadPoolExecutor原创 2016-03-05 19:27:05 · 977 阅读 · 0 评论 -
Java 多线程:生产者消费者模型
概念生产者消费者问题描述了两个线程(即生产者线程和消费者线程),共享固定大小的缓冲区,在实际运行中可能出现的问题。 - 生成者:生成一定量的数据放到缓冲区中,然后重复此过程。 - 消费者:在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数原创 2016-03-03 12:15:33 · 713 阅读 · 0 评论 -
Java 多线程:synchronized 多线程同步关键字
前言在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题。synchronized就是避免这个问题的解决方法之一。除了 synchronized 的方式,还有 lock,condition,volatile,threadlocal,atomicInteger,cas等方式。synchronized 用法它的修饰对象有几种: 1. 修饰一个原创 2016-03-02 11:11:39 · 991 阅读 · 0 评论 -
Java 多线程:ThreadLocal 多线程同步关键字
包括:一. 什么是 ThreadLocal二. ThreadLocal 类中的方法简介三. 如何使用ThreadLocal 3.1 3个线程共享一个对象,各自产生序列号 3.2 例子:共享变量a, 使用ThreadLocal 和没有使用的区别四. ThreadLocal 和同步机制的比较五.参考原创 2016-01-05 07:46:55 · 1015 阅读 · 0 评论 -
Java 多线程:AtomicInteger源码分析——基于CAS的乐观锁实现
AtomicInteger源码分析——基于CAS的乐观锁实现1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在一定的转载 2016-01-17 11:53:28 · 719 阅读 · 0 评论 -
Java 多线程:Condition 多线程同步关键字
包括:一. Condition 概念 和解决的问题二. Condition 在生产者消费者模型中的代码Demo一. Condition 概念 和解决的问题 Condition 是一种更细粒度的并发解决方案。就拿生产者消费者模式来说,当仓库满了的时候,又再执行到 生产者 线程的时候,会把 该 生产者 线程进行阻塞,再唤起一个线程,但是此时原创 2016-01-17 11:48:05 · 594 阅读 · 0 评论 -
Java 多线程:volatile 多线程同步关键字
包括:一. volatile 概念二. volatile 使用需要注意的地方一. volatile 概念volatile 也是 多线程的解决方案之一。volatile 能够保证 可见性,但是不能保证原子性。它只能作用于变量,不能作用于方法。当一个变量被声明为 volatile 的时候,任何 对该变量的读写都会绕过 高速缓存,直接读取主内存的变量的值。如何理解直接读写原创 2015-12-29 16:27:00 · 769 阅读 · 0 评论 -
Java 多线程:Lock 关键字
sleep() & interrupt()线程A正在使用sleep()暂停着: Thread.sleep(100000); 如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用 a.interrupt();令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以调用其他线程interrupt原创 2016-03-14 21:53:27 · 1190 阅读 · 0 评论