java并发编程-基础
线程带来的风险
安全性:多线程操作执行顺序的不可预测性 -- 永远不发生糟糕的事情;
活跃性:代码无法得到执行,死锁、饥饿问题 -- 某件正确的事情最终会发生;
性能问题:活跃性只意味着某件事最终会发生,但不是尽快发生;
- 线程安全性
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称为这个类是线程安全的。
线程安全类中封装了必要的同步机制,所以客户端无需进一步采取同步措施。
- 原子性
竞态条件:基于一种可能失效的观察结果来做出判断或执行某个计算;
要保持状态的一致性,就需要在单个原子操作中更新所有的相关状态变量;
- 加锁机制
内置锁
java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block)
1 // java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block) 2 // 同步代码块包含两部分 3 // 一个作为锁的对象引用,一个作为由这个锁保护的代码块 4 synchronized (lock) { 5 // 访问或修改由锁保护的共享状态 6 }
内置锁-同步代码块
重入:某线程试图获得一个已经由它自己持有的锁,这个请求会成功。重入的实现方式为,为每一个锁关联一个获取计数值和一个所有者线程,当计数值为0,这个锁认为没有任何线程持有。
重入避免了死锁情况的发生
// 如果内置锁不可重入,下面代码将发生死锁 public class Parent {public synchronized void doSomething() {} }public class Children extends Parent {public synchronized void doSomething() {super.doSomething();} }
锁的重入
- 可见性
转载于:https://www.cnblogs.com/binnzhao/p/6063407.html
java并发编程-基础相关推荐
- Java并发编程基础--ThreadLocal
Java并发编程基础之ThreadLocal ThreadLocal是一个线程变量,但本质上是一个以ThreadLocal对象为键.任意对象为值的存储结构,这个结构依附在线程上,线程可以根据一个T ...
- Java并发编程的艺术-Java并发编程基础
第4章 Java并发编程基础 Java从诞生开始就明智地选择了内置对多线程的支持,这使得Java语言相比同一时期的其他语言具有明显的优势.线程作为操作系统调度的最小单元,多个线程能够同时执行,这将 ...
- java 并发编程多线程_多线程(一)java并发编程基础知识
线程的应用 如何应用多线程 在 Java 中,有多种方式来实现多线程.继承 Thread 类.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现带 ...
- java并发编程入门_探讨一下!Java并发编程基础篇一
Java并发编程想必大家都不陌生,它是实现高并发/高流量的基础,今天我们就来一起学习这方面的内容. 什么是线程?什么是进程?他们之间有什么联系? 简单来说,进程就是程序的一次执行过程,它是系统进行资源 ...
- Java并发编程 基础知识学习总结
Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容,这部分的内容我也是反复学习了好几遍才能理解.本篇博客梳理一下最近从<Java 并发编程的艺术>和他人的博客学习Java并发 ...
- 【Java并发编程的艺术】读书笔记——Java并发编程基础
学习参考资料:<Java并发编程的艺术> 文章目录 1.线程的几种状态 2.如何安全的终止线程 3.线程间通信(重要) 3.1共享内存 3.2消息传递 1.线程的几种状态 线程在运行的生命 ...
- Java并发编程基础-ReentrantLock的机制
同步锁: 我们知道,锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁 ...
- java并发编程基础—生命周期与线程控制
一.线程生命周期 线程被创建启动以后,他既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Bloc ...
- java并发编程基础系列(五): 创建线程的四种方式
线程的创建一共有四种方式: 继承于Thread类,重写run()方法: 实现Runable接口,实现里面的run()方法: 使用 FutureTask 实现有返回结果的线程 使用ExecutorSer ...
- Java 并发编程 基础
第一章 线程的操作 1.1创建多线程的方式 第一种:继承Thread 第二种:实现Runnable接口 1.2线程的常用方法 currentThread(): 获取当前线程 isAlive():判断当 ...
最新文章
- 2014.4新版uboot启动流程分析
- 从零开始的ROS四轴机械臂控制-目录
- 使用optuna为机器学习模型挑选最优参数进行模型构建实战
- Hologres揭秘:如何支持超高QPS在线服务(点查)场景
- android 仿网易标题栏,仿网易新闻可滑动标题栏TabLayout(文字或图标)
- Android RecyclerView使用详解(一)
- 54 岁的当当李国庆“杀入”区块链!
- python发布代码图片_gitpython模块与代码发布项目流程图
- emacs java_Emacs配置与使用
- win7系统sql连接不上服务器,Win7 安装软件时无法连接sql server解决方法
- .net core借助sendCloud实现邮件验证码发送
- 内外兼修 华润啤酒的“有为”哲学
- WebAssembly之wasm2c工具编译使用
- 数据仓库与元数据管理
- 2.4 矩阵的特征值与特征向量
- 计算机设备名称英语词汇
- html里高度的英文,高度是什么意思
- 【python入门篇——11】字典(dict)详解
- 零伽壹链改研究:区块链技术在支付及清结算的变革与创新!
- Unity3d动画脚本 Animation Scripting