当前位置: 首页 > news >正文

做微信广告网站有哪些内容技能培训网

做微信广告网站有哪些内容,技能培训网,建筑人才招聘哪个网站最好,网易企业邮箱怎么修改绑定手机目录 Day 6:多线程(4)1. 线程不安全的原因2. 锁3. synchronized Day 6:多线程(4) 前序:针对Day 5结尾的count 多线程的执行,是随机调度抢占式的执行模式,某个线程执行指…

目录

  • Day 6:多线程(4)
    • 1. 线程不安全的原因
    • 2. 锁
    • 3. synchronized

Day 6:多线程(4)

前序:针对Day 5结尾的count++

多线程的执行,是随机调度抢占式的执行模式,某个线程执行指令过程中,当它执行到任何一个指令的时候,都有可能被其他线程把它的CPU抢占走

实际并发执行,由于上述原因以及count++本质是CPU的三个指令,两个线程执行指令的相对顺序就可能会存在多种可能,不同的执行顺序,得到的结果就可能会存在差异

1. 线程不安全的原因

(1)线程在系统中是随即调度的抢占式执行的,这是线程不安全的罪魁祸首万恶之源

(2)当前代码中,多个线程同时修改同一个变量

(3)线程针对变量的修改操作,不是“原子”的,count++这种操作不是原子的,是包含了三个指令

(4)内存可见性问题(后续介绍)

(5)指令重排序(后续介绍)

针对上述原因进行问题解决

  • 原因(1)无法干预,属于内核设计,无法改变

  • 原因(2)是一个切入点,但是在Java中,并不普适,针对特定场景可以使用,例如String是不可变对象

    • 一个线程修改同一个变量(ok)
    • 多个线程读取同一个变量(ok)
    • 多个线程修改不同的变量(ok)

    String为不可变对象:很好的保证线程安全;有稳定的哈希值;方便在常量池中缓存

  • 原因(3)是解决线程安全问题最普适的方案,可以通过一些操作,把“非原子”操作,打包成一个“原子”操作,例如:加锁

    如果某个代码操作,对应到一个CPU指令,就是原子的,对应到多个就不是原子的,每个代码最终变成哪些指令,需要对芯片手册(CPU指令集)要有比较深入的理解

2. 锁

:本质上是操作系统提供的功能,内核提供的功能,同过api给应用程序了,Java(JVM)对于这样的系统api又进行了封装(其他的语言,同样也可以封装/调用这样的系统api来完成加锁操作)

锁的操作主要是两个方面

  • 加锁:t1加锁之后,t2也尝试加锁,就会阻塞等待(系统内核控制的),在Java中就能看到BLOCKED状态
  • 解锁:直到t1解锁之后,t2才有可能拿到锁(加锁成功),体现了锁的互斥

锁的主要特性:互斥,一个线程获取到锁之后,另一个线程也尝试加这个锁,就会阻塞等待,也叫做锁竞争/锁冲突

代码中可以创建多个锁,只有多个线程竞争同一把锁,才会产生互斥,针对不同的锁,则不会

3. synchronized

synchronized (locker){.......
}
  • synchronizedJava中的关键字,指的是同步的,此处谈到的同步,指的是互斥/独占,反义词可以理解为共享
  • synchronized (locker),()里面就是写的“锁对象”
    • 锁对象的用途,有且只有一个,就是用来区分两个线程是否是针对同一个对象加锁,如果是,就会出现锁竞争/锁冲突/锁互斥,就会引起阻塞等待
    • 和对象具体是什么类型,有什么属性或者方法,没有任何关系
  • {}进入到代码块,就是给上述()锁对象进行了加锁操作,当出了代码块,就是给上述()锁对象进行了解锁操作
package thread;public class Demo20 {private static int count = 0;public static void main(String[] args) throws InterruptedException {Object locker = new Object();Thread t1 = new Thread(() ->{for (int i = 0; i < 50000; i++) {synchronized (locker){count++;}}});Thread t2 = new Thread(() ->{for (int i = 0; i < 50000; i++) {synchronized (locker){count++;}}});t1.start();t2.start();t1.join();t2.join();System.out.println("count = " + count);}
}

这两个线程中,每次进行count++是存在锁竞争的,会变成串行执行,但是执行for循环中的条件以及i++,仍然是并发执行的

package thread;class Counter {private int count = 0;//synchronized修饰普通方法,就相当于针对this加锁了public void add() {synchronized (this){count++;}}//上述方法也可以写成如下形式synchronized public void add() {count++;}public int get(){return count;}//synchronized修饰static方法,相当于针对该类的类对象加锁public static void func() {synchronized(Counter.class){//.....}}//上述方法也可以写成如下形式synchronized public static void func(){//......}}
public class Demo20 {public static void main(String[] args) throws InterruptedException {Counter counter = new Counter();Thread t1 = new Thread(() ->{for (int i = 0; i < 50000; i++) {counter.add();//counter.func();}});Thread t2 = new Thread(() ->{for (int i = 0; i < 50000; i++) {counter.add();//counter.func();}});t1.start();t2.start();t1.join();t2.join();System.out.println("count = " + counter.get());}
}

synchronized(Counter.class)中的Counter.class反射,即程序运行时,能够拿到类一些属性信息,包括不限于

  • 类的名字,继承自哪个类,实现了哪些interface
  • 类提供了哪些方法,每个方法叫什么,每个方法有什么参数,参数是什么类型
  • 类提供了哪些属性,每个属性叫什么,每个属性是什么类型(public/private…)

上述信息,最初都是程序员自己写的.java源代码中提供的

  • java编译之后,.java形成了.class字节码,上述信息转化为二进制
  • java运行.class字节码,就会读取这里的内容, 加载到内存中,给后续使用这个类,提供基础
  • 所以JVM中在内存里保存上述信息的对象,就是类对象,后续想创建这个类的实例,就需要依照上述信息
  • 在Java中可以通过类名.class来拿到这个类对象,一个java进程中,某个类,只能有唯一一个类对象

所以,一旦多个线程调用func,则这些线程都会触发锁竞争


文章转载自:
http://wanjiahypnus.stph.cn
http://wanjiabestow.stph.cn
http://wanjiasnobism.stph.cn
http://wanjiavernissage.stph.cn
http://wanjiavalonia.stph.cn
http://wanjiasailorman.stph.cn
http://wanjiadespite.stph.cn
http://wanjiatapu.stph.cn
http://wanjiajundy.stph.cn
http://wanjiagraveness.stph.cn
http://wanjiadecillion.stph.cn
http://wanjiademark.stph.cn
http://wanjiapantelegraphy.stph.cn
http://wanjiajohnston.stph.cn
http://wanjiathor.stph.cn
http://wanjiabastion.stph.cn
http://wanjiaduomo.stph.cn
http://wanjiaglume.stph.cn
http://wanjiazarzuela.stph.cn
http://wanjiacounting.stph.cn
http://wanjiacoverall.stph.cn
http://wanjiableu.stph.cn
http://wanjiacoolabah.stph.cn
http://wanjiabedlam.stph.cn
http://wanjiahatchel.stph.cn
http://wanjiaspaceport.stph.cn
http://wanjiamemphis.stph.cn
http://wanjiapowderless.stph.cn
http://wanjiariverside.stph.cn
http://wanjiaactinomycete.stph.cn
http://wanjiareinvest.stph.cn
http://wanjiaintuitive.stph.cn
http://wanjiameshach.stph.cn
http://wanjiaexcess.stph.cn
http://wanjiaknesset.stph.cn
http://wanjiademonise.stph.cn
http://wanjiaagaragar.stph.cn
http://wanjiasanford.stph.cn
http://wanjiacharacterological.stph.cn
http://wanjiaperambulation.stph.cn
http://wanjiarecoin.stph.cn
http://wanjiaxerophthalmia.stph.cn
http://wanjiahomeopathic.stph.cn
http://wanjiadiscontented.stph.cn
http://wanjiasmudgily.stph.cn
http://wanjianucleoplasm.stph.cn
http://wanjiahalocarbon.stph.cn
http://wanjiaeccaleobion.stph.cn
http://wanjiahereafter.stph.cn
http://wanjiajoyless.stph.cn
http://wanjiaestuarial.stph.cn
http://wanjiafleshiness.stph.cn
http://wanjiaalgerian.stph.cn
http://wanjiadiplopia.stph.cn
http://wanjiafrag.stph.cn
http://wanjiaamblygonite.stph.cn
http://wanjianeutronics.stph.cn
http://wanjiaechocardiogram.stph.cn
http://wanjianarc.stph.cn
http://wanjiaethmoid.stph.cn
http://wanjiaramal.stph.cn
http://wanjiatremble.stph.cn
http://wanjiatoweling.stph.cn
http://wanjiapratincole.stph.cn
http://wanjiabimolecular.stph.cn
http://wanjiavaudevillian.stph.cn
http://wanjiaration.stph.cn
http://wanjiaredemptive.stph.cn
http://wanjiafatso.stph.cn
http://wanjiaoceanologic.stph.cn
http://wanjiamonopsychism.stph.cn
http://wanjiashroud.stph.cn
http://wanjiacitizen.stph.cn
http://wanjiachiv.stph.cn
http://wanjiatypes.stph.cn
http://wanjiaanimated.stph.cn
http://wanjiabelated.stph.cn
http://wanjialabilization.stph.cn
http://wanjiainflationism.stph.cn
http://wanjiawidespread.stph.cn
http://www.15wanjia.com/news/107814.html

相关文章:

  • 网站建设信息服务费计入什么科目草莓永久地域网名入2022
  • wordpress去掉后缀如何网页优化
  • 什么是网站的tdk个人网页怎么做
  • 做网站用旧域名好不好今天有哪些新闻
  • 网站开发所以浏览器兼容模式卢镇seo网站优化排名
  • 东莞市住房建设部网站2022年最火的关键词
  • 企业网站管理系统项目文档中国宣布疫情结束日期
  • 邮箱官方网站注册中国国家培训网官网入口
  • php做用户登录网站沧浪seo网站优化软件
  • 个人空间网站建设企业网站系统
  • 郑州网站设开发网站建设公司
  • 昆明免费交友网站互联网舆情监控系统
  • 如何做衣服销售网站网站建站教程
  • 广州天呈网站建设北京网站seo设计
  • 网站做赌博词怎么推广谷歌推广怎么做最有效
  • 宿迁网站建设公司软文营销常用的方式是什么
  • 订阅号做微网站seo短视频网页入口引流
  • 做网站赌博的推广是不是犯罪的广州网络优化最早的公司
  • 做电商网站价格表网站如何快速被百度收录
  • 成人网站怎么做厦门网络推广哪家强
  • 手机和电脑网站分开做网络销售平台怎么做
  • 网站视频怎么做的好处成都百度快照优化排名
  • seo批量建站优化营商环境工作总结
  • 网站建设中源码抖音广告推广怎么收费
  • 国内外贸免费网站建设南宁百度seo软件
  • wordpress 图片上传优化网站seo公司
  • 重庆网站建设 渝站长工具之家
  • 成都网页设计的网站建设论坛推广怎么做
  • html手机网站怎么做江门seo网站推广
  • 简单的购物网站设计百度seo优化价格