博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[多线程]线程基础(对象锁、class锁、同步、异步)
阅读量:5078 次
发布时间:2019-06-12

本文共 825 字,大约阅读时间需要 2 分钟。

synchronized、volatile、ReentrantLock、concurrent

线程安全:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的

synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为“互拆区”或“临界区”

锁竟争:要尽量避免(会消耗CPU资源)

class锁和对象锁:多线程多对象则会产生多个锁(一个对象一个锁),采用static synchronized修饰可避免多个锁(class锁无论N个对象均产生一个锁)

同步和异步:

                    一个类两个方法(一个同步方法,一个异步方法);两个线程访问同时分别访问一个对象的同步方法和异步方法,执行异步方法无需等待同步方法执行完后;

                    一个类两个方法(两个均为同步方法);两个线程访问同时分别访问一个对象的两个同步方法,执行同步方法必须等待先执行的同步方法执行完后;

 

synchronized锁重入:同步方法调用同步方法、父类同步方法调用子类同步方法

synchronized代码块:注意synchronized代码块的锁,要避免用户字符串常量

volatile概念:

      修饰变量,主要作用是使变量在多个线程间可见(实现主内存和线程工作内存可见)

      性能比synchronized强很多,不会造成阻塞;

      volatile关键字非原子性(不具备同步性);只具有可见性没有原子性(要实现原子性建议使用atomic类系列对象);

      在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。

       

 

posted on
2017-10-10 01:13 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/boazy/p/7643716.html

你可能感兴趣的文章
使用 JointCode.Shuttle 访问任意 AppDomain 的服务
查看>>
sqlite的坑
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
Jquery ui widget开发
查看>>
关于indexOf的使用
查看>>
英语单词
查看>>
Mongo自动备份
查看>>
cer证书签名验证
查看>>
新手Python第一天(接触)
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
codevs 1080 线段树练习
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>