java并发实战-基础知识
1.线程安全
共享:变量可以由多个线程同时访问.可变:变量值在生命周期内可以变化.
当多个线程访问某个类时,这个类始终都能表现出正确的行为,称这个类是线程安全的.
无状态对象是线程安全的.
2.原子性
竞态条件:由于不恰当的执行时序而出现不正确的结果,是一种非常重要的情况.
a.先检查后执行是一种常见的延迟初始化操作.目的是:将对象的初始化操作推迟到实际被使用时才执行.同时要确保只被初始化一次.
3.复合操作
避免竞态条件问题,必须在某线程修改该变量时,通过某种方式防止其让线程使用这个变量.从而确保其他线程只能在修改操作完成之前或之后读取和修改状态,而不是在修改过程.有两个操作A和B,当一个线程执行的时候要么执行完,要么不执行.那A和B对彼此来说就是原子性的,
4.加锁操作
要保持状态一致性就需要在单个原子操作中更新所有相关的状态变量.
5.重入
重入获取锁的操作粒度是线程,而不是调用.重入的一种实现方式是:为每个锁关联一个获取计数和一个所有者线程.当计数值为0,当计数值为0,认为这个锁没有被任何线程持有.
6.用锁来保护状态
每个共享的和可变的变量都应该只由一个锁来保护,从而使维护人员知道是哪个锁.
在简单性和性能之间存在着相互制约因素,当实现某个同步策略时,一定不要盲目为了性能而牺牲简单性.
当执行时间较长或者无法完成的操作(如网络I/O,或控制台I/O)一定不要持有锁.
java并发实战-基础知识的更多相关文章
- Java并发(基础知识)—— Executor框架及线程池
在Java并发(基础知识)—— 创建.运行以及停止一个线程中讲解了两种创建线程的方式:直接继承Thread类以及实现Runnable接口并赋给Thread,这两种创建线程的方式在线程比较少的时候是没有 ...
- Java并发(基础知识)—— 阻塞队列和生产者消费者模式
1.阻塞队列 Blocki ...
- 多线程(一)java并发编程基础知识
线程的应用 如何应用多线程 在 Java 中,有多种方式来实现多线程.继承 Thread 类.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现带 ...
- Java并发(基础知识)—— 创建、运行以及停止一个线程
在计算机世界,当人们谈到并发时,它的意思是一系列的任务在计算机中同时执行.如果计算机有多个处理器或者多核处理器,那么这个同时性是真实发生的:如果计算机只有一个核心处理器那么就只是表面现象. 现代所有的 ...
- Java并发(基础知识)——显示锁和同步工具类
显示锁 Lock接口是Java ...
- Java并发(基础知识)—— Java中断机制
上文讲解了Java线程的创建.启动以及停止,在讲到停止线程时说到了Java中断,Java中断是停止线程的一种协作机制,本文打算对Java中断机制进行详细讲解. 在网上搜索Java中断机制,发现两篇好文 ...
- 【Java虚拟机4】Java内存模型(硬件层面的并发优化基础知识--缓存一致性问题)
前言 今天学习了Java内存模型第一课的视频,讲了硬件层面的知识,还是和大学时一样,醍醐灌顶.老师讲得太好了. Java内存模型,感觉以前学得比较抽象.很繁杂,抽象. 这次试着系统一点跟着2个老师学习 ...
- Java面试题-基础知识
参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...
- 并发-Java并发编程基础
Java并发编程基础 并发 在计算机科学中,并发是指将一个程序,算法划分为若干个逻辑组成部分,这些部分可以以任何顺序进行执行,但与最终顺序执行的结果一致.并发可以在多核操作系统上显著的提高程序运行速度 ...
随机推荐
- rsync+sersync实现代码同步
APP02安装 rsync服务端 yum install rsync vim /etc/rsyncd.conf pid file=/var/rsynclog/rsyncd.pid log file=/ ...
- vue 学习链接地址
使用Vue.js构建Web应用程序 http://www.jdon.com/48545# 一步步带你做vue后台管理框架(一)——介绍框架 http://www.cnblogs.com/herozho ...
- redhat7 配置使用centos的yum源
新安装了redhat7.安装后,登录系统,使用yum update 更新系统.提示: This system is not registered to Red Hat Subscription Man ...
- [Java]先有Class还是先有Object?
先有鸡还是先有蛋 这个问题让我想到了一个古老的问题,先有鸡还是先有蛋. 回到本题 下面让我们详细看一下这个问题: 在Java的对象模型中: 所有的类都是Class类的实例,Object是类,那么Obj ...
- 使用代理实现对C# list distinct操作
范型在c#编程中经常使用,而经常用list 去存放实体集,因此会设计到对list的各种操作,比较常见的有对list进行排序,查找,比较,去重复.而一般的如果要对list去重复如果使用linq dist ...
- Mybatis学习之一
mybatis是目前市面上最流行的ORM框架之一,作为JavaEE程序员,在工作中不可能不用到mybatis.所以为了工作,为了学习,为了个人的发展,每个JavaEE程序员都要学习,学会mybatis ...
- 安装vue-cli-service和webpack
https://www.zacms.com/index.php/archives/106/ http://www.cnblogs.com/sloong/p/5584684.html
- WEB API 系列(二) Filter的使用以及执行顺序
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
- CentOS设置服务开机启动的两种方法
一.通过服务的方式设置自启动 1. 在/etc/init.d 下建立相关程序的启动脚本 2. chkconfig --add mysqld(添加服务到chkconfig列表中) chkconfig ...
- 必会SQL练习题
()表名:购物信息 购物人 商品名称 数量 A 甲 B 乙 C 丙 A 丁 B 丙 …… 给出所有购入商品为两种或两种以上的购物人记录 答:); ()表名:成绩表 姓名 课程 分数 张三 语文 张三 ...