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

定制网站多少钱陕西省网页制作

定制网站多少钱,陕西省网页制作,推荐邯郸网站建设,阿里云可以做电影网站吗阿华代码#xff0c;不是逆风#xff0c;就是我疯#xff0c;你们的点赞收藏是我前进最大的动力#xff01;#xff01;希望本文内容能够帮助到你#xff01; 目录 一#xff1a;问题引入 二#xff1a;问题深入 1#xff1a;举例说明 2#xff1a;图解双线程计算…阿华代码不是逆风就是我疯你们的点赞收藏是我前进最大的动力希望本文内容能够帮助到你 目录 一问题引入 二问题深入 1举例说明 2图解双线程计算 ​编辑 3线程不安全原因的总结 1根本原因 2代码结构 3直接原因 4内存可见性问题 5指令重排序问题 5解决问题的思路 1针对根本原因解决 2针对代码结构的原因解决 3针对直接原因——加锁 三synchronized关键字加锁 1synchronized 2核心内容 1含义 2代码解释 ①“锁竞争” ②“加锁” ③“同一对象” ④“都要加锁” 3变式 变式①this 变式② 类名.class 变式③public前加synchronized 变式④static方法前加synchronized少见 一问题引入 用多线程让计数器自增到1_0000 package thread;public class ThreadDemon19 {private static long count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(()-{for (int i 0; i 5000; i) {count ;}});Thread t2 new Thread(()-{for (int i 0; i 5000; i) {count ;}});t1.start();t2.start();t1.join();t2.join();System.out.println(双线程的计算结果是count);}}package thread;public class ThreadDemon20 {private static long count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(()-{for (int i 0; i 1_0000; i) {count ;}});t1.start();t1.join();System.out.println(单线程的计算结果是count);}}通过上述代码的举例我们发现解决同一个问题怎么最后的结果会不一样呢真是奇了怪了。 二问题深入 结果不一样猜测是循环自增代码这一块出现问题 1举例说明 我们知道cpu可以读取指令解析指令执行指令此处我们重点关注执行指令 count实际由三个指令构成的 1load从内存中读取数据到cpu的寄存器当中 2add把寄存器当中的值1 3save把寄存器当中的值写回到内存中 2图解双线程计算 t1t2双线程的运行下可能同一次读取操作中t1和t2都读取到的是没有自增的数 可以通俗的理解本来t1由数字1自增后到2t2读取的应该是2然后自增到3. 但是如果t2 在 t1把自增后的2 save回寄存器中  之前  读取的话 t2读到的就是1最后只能自增到2 可以理解成被覆盖了 所以这就出现了矛盾计算的数据越小矛盾越小因为cpu运行速度很快可能第一个线程运行结束了第二个线程还没有开始运行 以上可以画出无数种情况比如t1线程自增了2次3次t2线程才执行了1次。这就是线程的随机调度和抢占式执行 3线程不安全原因的总结 1根本原因 是线程的“抢占式执行和随机调度” 2代码结构 多个线程可以修改同一变量 3直接原因 是上述多线程修改变量这一操作并不是“原子性”的而是可拆分的就像我们上面画的图这里就是操作系统底层结构的问题了 4内存可见性问题 5指令重排序问题 45条上述代码没有涉及我们后续再详细引入 5解决问题的思路 为了确保结果的正确我们得确保第一个线程save了过后第二个线程再去load。这时第二个线程load到的数据才是自增过后正确的数据 1针对根本原因解决 不可行。如果要修改线程的“抢占式执行和随机调度”这一机制的话就得修改操作系统中的内核相当于是重新写了一个“新的系统” 2针对代码结构的原因解决 有些地方代码结构可以进行修改但是有些地方不可以视情况而论 3针对直接原因——加锁 count由三个指令完成我们如果给这三个指令打包成一个整体的话就可以避免线程出现问题了也就是“加锁” 三synchronized关键字加锁 1synchronized 关键字synchronized(对象){加锁内容}; 注synchronized的加锁依赖于对象 2核心内容 1含义 如果第一个线程对某个对象上锁之后第二个线程要想对同一个对象上锁就必须等第一个线程释放锁此时第二个线程是处于BLOCKED阻塞状态 package thread;/*** Created with IntelliJ IDEA.* Description:* User: Hua YY* Date: 2024-09-21* Time: 15:27*/ public class ThreadDemon21 {private static long count 0;public static void main(String[] args) throws InterruptedException {Object locker new Object();//创建一个object对象Thread t1 new Thread(()-{for (int i 0; i 5000; i) {synchronized (locker){ //锁到object这个对象上count;}}});Thread t2 new Thread(()-{for (int i 0; i 5000; i) {synchronized(locker){ //锁到object这个对象上count;}}});t1.start();t2.start();t1.join();t2.join();System.out.println(计算结果是 count);}}2代码解释 ①“锁竞争” 通过“锁竞争”让让第二个线程无法插入到第一个线程的执行指令当中。 ②“加锁” “加锁”就是把count中三个指令loadaddsave打包成一个“原子性”的操作最小单位的操作再也不可分割了 ③“同一对象” 加锁的对象不同“锁竞争”就不会发生线程安全问题依旧存在 ④“都要加锁” 如果第一个线程加锁第二个线程不加锁“锁竞争”也不会发生线程安全问题依旧存在 3变式 变式①给this加锁 this指向的还是同一个对象t1和t2依旧会产生“锁竞争” package thread;/*** Created with IntelliJ IDEA.* Description:* User: Hua YY* Date: 2024-09-21* Time: 15:27*/ class Test{public long count 0;public void add(){synchronized (this){count;}}} public class ThreadDemon22 {public static void main(String[] args) throws InterruptedException {Test test new Test();Thread t1 new Thread(()-{for (int i 0; i 5000; i) {test.add();}});Thread t2 new Thread(()-{for (int i 0; i 5000; i) {test.add();}});t1.start();t2.start();t1.join();t2.join();System.out.println(计算结果是 test.count);} }变式② 类名.class 获取到当前类的对象类对象包含了这个类的各种信息类名字属性方法....... 变式③public前加synchronized 等价写法 变式④给类对象加锁static static方法前加synchronized少见 如果synchronized加到static方法上就相当于给类对象加锁了
http://www.w-s-a.com/news/625937/

相关文章:

  • 好看的个人博客主页长安网站优化公司
  • 企业网站关站大型综合新闻门户网站织梦模板
  • 网站优化排名易下拉效率查企业网站
  • 网站建设湛江关于汽车的网站
  • 南宁模板建站多少钱企业黄页名单
  • 企业网站的建设一般要素有网站定制公司地址
  • 婚纱摄影网站设计案例四川省城乡建设厅官方网站
  • 怎么做海淘网站wordpress首页表单
  • 大连网站优化技术长沙高端网站建设服务
  • 郎创网站建设做的网站 v2ex
  • 广东网站建设教程江西城乡住房建设网站
  • 做ppt卖给网站wordpress insert
  • 文化传媒公司网站模板wordpress转typecho
  • 网站建设设计视频郑州 服装网站建设
  • 网站建设什么公司好织梦cms默认密码
  • 大型网站 空间网上商城官网入口
  • 成都全美网站建设江苏专业网站建设
  • 足球网站模板有帮忙做阿里巴巴网站的吗
  • 建设厅报名网站京东网站的建设与发展前景
  • 金寨县住房和城乡建设部网站网页作业怎么做一个网站
  • 做ppt模板网站有哪些内容wap是什么意思卡老师
  • 网站建设一定要域名吗网站后台关键词设置
  • 标书制作公司网站坪山网站建设哪家便宜
  • 防止做网站的人修改数值门户网站架构
  • 电子项目外包网站考二建需要什么学历和专业
  • 做网站推广引流效果好吗电商推广技巧
  • 亦庄网站建设价格广州网站推广服务
  • 十大免费ppt网站下载重庆在线高校平台登录
  • 做环保网站案例百度seo教程
  • 体育用品网站模板网站建设话术