07 2018 档案

Java并发编程原理与实战十二:深入理解volatile原理与使用
摘要:volatile:称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的。 可见:一个线程修改了这个变量的值,在另一个线程中能够读取到这个修改后的值。 synchronized除了线程之间互斥之外,还有一个非常大的作用,就是保证可见性。以下demo即保证a值的可见性。 首先来看demo: 阅读全文

posted @ 2018-07-27 00:12 pony1223 阅读(430) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十一:锁重入&自旋锁&死锁
摘要:一、锁重入 运行结果: 以上结果说明,线程A在释放方法a的同步锁之前,是可以重新获得b方法的同步锁的。同一个线程拿到同一个对象的锁,它是可以进入另一个同步方法的,这就是锁的重入。以上代码仅仅是同一个线程在一个同步方法中去成功调用另一个同步方法,并且,锁的是同一个实例。那么,不同的线程拿同一把对象去加 阅读全文

posted @ 2018-07-27 00:09 pony1223 阅读(472) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战十:单例问题与线程安全性深入解析
摘要:单例模式我想这个设计模式大家都很熟悉,如果不熟悉的可以看我写的设计模式系列然后再来看本文。单例模式通常可以分为:饿汉式和懒汉式,那么分别和线程安全是否有关呢? 一、饿汉式 先看代码: 运行结果: 所谓的饿汉模式:不管是否使用到instance这个实例,我们都在创建的过程中就对它进行实例化。 那么,饿 阅读全文

posted @ 2018-07-27 00:01 pony1223 阅读(395) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战九:synchronized的原理与使用
摘要:一、理论层面 内置锁与互斥锁 修饰普通方法、修饰静态方法、修饰代码块 二、JVM层面 查看xx方法同步代码块字节码: 查看同步方法字节码: 任何对象都可以作为锁,那么锁信息又存在对象的什么地方呢? 存在对象头中。 对象头中的信息: Mark Word Class Metadata Address 类 阅读全文

posted @ 2018-07-25 23:53 pony1223 阅读(716) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)
摘要:前面我们说到多线程带来的风险,其中一个很重要的就是安全性,因为其重要性因此,放到本章来进行讲解,那么线程安全性问题产生的原因,我们这节将从底层字节码来进行分析。 一、问题引出 先看一段代码 运行结果:仔细发现,出现了两个84,但代码想要的结果是,每个线程每次执行,就在原来的基础上加一。因此,这里就是 阅读全文

posted @ 2018-07-24 23:23 pony1223 阅读(585) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战七:线程带来的风险
摘要:在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源。但使用多线程同时会带来相应的风险,本文将展开讨论。 一、引言 多线程将会带来几个问题: 1、安全性问题 线程安全性可能是非常复杂的,多线程中的操作执行顺序是不可预测的,甚至会产生奇怪的结果,另外由于存在指令重排序的可能 阅读全文

posted @ 2018-07-24 22:43 pony1223 阅读(363) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战六:主线程等待子线程解决方案
摘要:本文将研究的是主线程等待所有子线程执行完成之后再继续往下执行的解决方案 首先是一个线程,它执行完成需要5秒。 1、主线程等待一个子线程 在主线程中,需要等待子线程执行完成。但是执行上面的main发现并不是想要的结果: 子线程执行时长:0Thread-0子线程开始Thread-0子线程结束 很明显主线 阅读全文

posted @ 2018-07-23 23:59 pony1223 阅读(6163) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战五:创建线程的多种方式
摘要:一、继承Thread类 二、实现Runnable 接口 三、匿名内部类的方式 四、带返回值的线程 import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Demo4 impl 阅读全文

posted @ 2018-07-22 10:02 pony1223 阅读(393) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战四:线程如何中断
摘要:如果你使用过杀毒软件,可能会发现全盘杀毒太耗时间了,这时你如果点击取消杀毒按钮,那么此时你正在中断一个运行的线程。 java为我们提供了一种调用interrupt()方法来请求终止线程的方法,下面我们就一起来学习一下线程的中断。 每一个线程都有一个boolean类型标志,用来表明当前线程是否请求中断 阅读全文

posted @ 2018-07-21 01:17 pony1223 阅读(913) 评论(1) 推荐(0) 编辑

Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题
摘要:一、进程 考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?另外,假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源。你是不是已经想到在 阅读全文

posted @ 2018-07-21 01:04 pony1223 阅读(1172) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二:并行&并发&多线程的理解
摘要:1.CPU的发展趋势: 核心数目依旧会越来越多,根据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的PC桌面在2018年可能回到24核心。 2.并发和并行的区别: 所有的并发处理都有排队等候,唤醒和执行这三个步骤,所以并发是宏观的观念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被 阅读全文

posted @ 2018-07-20 08:27 pony1223 阅读(1640) 评论(0) 推荐(0) 编辑

ConcurrentHashMap 产生NullPointerException
摘要:今天测试在发给我一段报错日志后,根据日志定位到从ConcurrentHashMap 的缓存中get的时候,ConcurrentHashMap的底层抛出了空指针,当时感觉很奇怪为什么在get的时候产生空指针了呢? 模拟代码: 这个地方出现空指针,难道是传入的null 所以出现了空指针了,事实证明确实传 阅读全文

posted @ 2018-07-19 23:40 pony1223 阅读(9167) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战一:聊聊并发
摘要:一、大纲 •你真的了解并发吗 •多线程和并发 •多线程和多进程 •线程一定快吗 •学习并发的四个阶段 •学习目标 •适合人群 •荐书 二、学习并发的四个阶段 •熟练掌握API,能够完成并发编程 •熟读API源码,掌握其原理 •理解Java虚拟机的内存模型 •操作系统对并发的支持 三、为什么要学习并发 阅读全文

posted @ 2018-07-19 08:25 pony1223 阅读(503) 评论(0) 推荐(0) 编辑

JAVA多线程提高十四: 面试题
摘要:前面针对多线程相关知识点进行了学习,那么我们来来看看常见的面试题: 其它面试题: https://www.cnblogs.com/Jansens520/p/8624708.html Java多线程常用面试题(含答案,精心总结整理) 阅读全文

posted @ 2018-07-18 08:30 pony1223 阅读(332) 评论(0) 推荐(0) 编辑

JAVA多线程提高十三:同步集合类的应用
摘要:1.引言 在多线程的环境中,如果想要使用容器类,就需要注意所使用的容器类是否是线程安全的。在最早开始,人们一般都在使用同步容器(Vector,HashTable),其基本的原理,就是针对容器的每一个操作,都添加synchronized来进行同步,此种方式尽管简单,但是其性能是非常地下的,所以现在已经 阅读全文

posted @ 2018-07-17 08:20 pony1223 阅读(563) 评论(0) 推荐(0) 编辑

JAVA多线程提高十二:阻塞队列应用
摘要:一、类相关属性 接口BlockingQueue<E>定义: 方法摘要 在所有方法对类中存储数据的数组做操作时,需要获取锁lock。 BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四种形式的处理方式不同:第一种是抛出一个异常,第二种是返回一个特殊 阅读全文

posted @ 2018-07-16 08:25 pony1223 阅读(1651) 评论(0) 推荐(1) 编辑

JAVA多线程提高十一:同步工具Exchanger
摘要:Exchanger可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和 阅读全文

posted @ 2018-07-16 08:10 pony1223 阅读(275) 评论(0) 推荐(0) 编辑

JAVA多线程提高十:同步工具CyclicBarrier与CountDownLatch
摘要:今天继续学习其它的同步工具:CyclicBarrier与CountDownLatch 一、CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必 阅读全文

posted @ 2018-07-13 08:19 pony1223 阅读(1025) 评论(1) 推荐(0) 编辑

JAVA多线程提高九:Semaphere同步工具
摘要:java 中Semaphere可类比操作系统信号量,硬件资源如IO、内存、磁盘等都是有固定量的,多个程序需要竞争这些资源,没有资源就需要被挂起。 一、类和方法摘要 构造函数: public Semaphore(int permits):创建具有给定的许可数和非公平的公平设置的 Semaphore。  阅读全文

posted @ 2018-07-13 08:05 pony1223 阅读(427) 评论(0) 推荐(0) 编辑

JAVA多线程提高八:线程锁技术
摘要:前面我们讲到了synchronized;那么这节就来将lock的功效。 一、locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: 接口摘要: 类摘要: 二、synchronized与lock synchronized对比lock: 1、synch 阅读全文

posted @ 2018-07-10 08:24 pony1223 阅读(3210) 评论(1) 推荐(2) 编辑

JAVA多线程提高七:Callable与Future的应用
摘要:Callable与Runnable 先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法: 由于run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。 Callable位于java.util.concurrent包下,它也是一个接口,在 阅读全文

posted @ 2018-07-09 22:47 pony1223 阅读(1407) 评论(0) 推荐(0) 编辑

JAVA多线程提高六:java5线程并发库的应用_线程池
摘要:前面我们对并发有了一定的认识,并且知道如何创建线程,创建线程主要依靠的是Thread 的类来完成的,那么有什么缺陷呢?如何解决? 一、对比new Threadnew Thread的弊端 a. 每次new Thread新建对象性能差。 b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占 阅读全文

posted @ 2018-07-09 22:40 pony1223 阅读(666) 评论(0) 推荐(0) 编辑

JAVA多线程提高五:原子性操作类的应用
摘要:当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作,通常我们会使用synchronized来解决这个问 阅读全文

posted @ 2018-07-05 08:27 pony1223 阅读(752) 评论(0) 推荐(0) 编辑

JAVA多线程提高四:多个线程之间共享数据的方式
摘要:多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做。 如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,有如下两种方式来实现这些Runnable对象之间的数据共享: 阅读全文

posted @ 2018-07-02 22:38 pony1223 阅读(2490) 评论(0) 推荐(1) 编辑

JAVA多线程提高三:线程范围内共享变量&ThreadLocal
摘要:今天我们学习的是如何在线程自己的范围内达到变量数据的共享,而各个线程之间又是互相独立开来,各自维护的,即我们说的ThreadLocal的作用。 一、概念 可以将每个线程用到的数据与对应的线程号存放到一个map集合中,使用数据时从这个集合中根据线程号获取对应线程的数据,就可以实现线程范围内共享相同的变 阅读全文

posted @ 2018-07-01 22:55 pony1223 阅读(704) 评论(0) 推荐(0) 编辑

JAVA多线程提高一:传统线程技术&传统定时器Timer
摘要:前面我们已经对多线程的基础知识有了一定的了解,那么接下来我们将要对多线程进一步深入的学习;但在学习之前我们还是要对传统的技术进行一次回顾,本章我们回顾的则是:传统线程技术和传统的定时器实现. 一、传统线程技术 1.创建方式 1、继承thread类 2、实现Runnable接口 3、实现Callabl 阅读全文

posted @ 2018-07-01 22:40 pony1223 阅读(526) 评论(0) 推荐(0) 编辑

JAVA多线程提高二:传统线程的互斥与同步&传统线程通信机制
摘要:本文主要是回顾线程之间互斥和同步,以及线程之间通信,在最开始没有juc并发包情况下,如何实现的,也就是我们传统的方式如何来实现的,回顾知识是为了后面的提高作准备。 一、线程的互斥 为什么会有线程的互斥?可以想银行取款的问题,如果不做监控,多个人同时针对一个存折取钱的时候就会出现钱不对的问题,下面我们 阅读全文

posted @ 2018-07-01 22:40 pony1223 阅读(505) 评论(0) 推荐(0) 编辑

JAVA多线程基础学习三:volatile关键字
摘要:Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字。 volatile,从字面上说是易变的、不稳定的,事实上,也确实如此,这个关键字的作用就是告诉编译器,只要是被此关键字修饰的变量都是易变的、不稳定的。那为什么是易变的呢?因为 阅读全文

posted @ 2018-07-01 22:11 pony1223 阅读(879) 评论(1) 推荐(1) 编辑

JAVA多线程基础学习二:synchronized
摘要:本篇主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题,没错就是使用synchronized. 一、如何解决线程安全问题? 一般来说,是如何解决线程安全问题的呢?基本上所有的并发模式在解决线程安全问题时,都采用“序列化访问临界资 阅读全文

posted @ 2018-07-01 11:33 pony1223 阅读(997) 评论(0) 推荐(1) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示