上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页

2018年7月27日

Java并发编程原理与实战十二:深入理解volatile原理与使用

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

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

Java并发编程原理与实战十一:锁重入&自旋锁&死锁

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

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

Java并发编程原理与实战十:单例问题与线程安全性深入解析

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

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

2018年7月25日

Java并发编程原理与实战九:synchronized的原理与使用

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

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

2018年7月24日

Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)

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

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

Java并发编程原理与实战七:线程带来的风险

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

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

2018年7月23日

Java并发编程原理与实战六:主线程等待子线程解决方案

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

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

2018年7月22日

Java并发编程原理与实战五:创建线程的多种方式

摘要: 一、继承Thread类 二、实现Runnable 接口 三、匿名内部类的方式 四、带返回值的线程 import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Demo4 impl 阅读全文

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

2018年7月21日

Java并发编程原理与实战四:线程如何中断

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

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

Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题

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

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

上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页

导航