博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)
阅读量:7081 次
发布时间:2019-06-28

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

1 /*  内容:同步代码块,目的是解决多线程中的安全问题。什么安全问题呢??就是在执行run方法时,假如线程-0刚刚获得执行权, 2  *还没执行时,就挂那了,这时线程-1获得执行权,并进行执行,就有可能出现负数票的情况。 3  *原因:当一个线程执行run方法时,线程1操作共享数据时,失去了cpu执行权,导致线程2执行run方法,从而导致共享数据错误。 4  *  解决办法:给多线程所要执行的代码加上锁。当一个线程执行run方法时,锁上锁,即使失去CPU执行权, 5  *从而使其他线程不能执行run方法; 6  *  synchronized(对象_){同步代码}:同步代码块,其中包含多线程共同执行的代码,此代码被同步. 7  *  其中的对象就像一个锁.即使执行同步代码的线程失去CPU执行权,其他线程也会被锁在外面不能执行同步代码 8  *  疑惑:obj对象??/毕老师当时没讲,只说了可以是任意对象,他直接调用的object上帝类建立了对象; 9  * 例子:火车中的厕所10  * 同步前提:1,必须有两个或者两个以上的线程11  *      2,这些线程必须是使用的同一个锁.(原因举例:3,4节车厢的厕所,不是同一个锁,线程1,线程2可以同时进入3,4节车厢的厕所,不能达到同步的目的.12  *好出:解决了多线程的安全问题13  *弊端:每次都得判断锁,浪费了资源.14  */15 package ThreadDemoOne;16 class TicketDemo implements Runnable17 {18  int ticket=1000;19  Object obj =new Object();20  public void run()21  {22   while(true)23   {24    synchronized(obj)//obj就是一个锁,这里的synchronized就是同步代码块.括起来的就是线程需要一次性执行完的代码.25    {26    27     if(ticket>0)28      {29      System.out.println(Thread.currentThread()+"号售票员"+"这是第"+this .ticket+"张票");30     ticket--;31      } 32    } 33     34   }35  }36 }37 public class ThreadDemo6 38 {39  public static void main(String[] args )40  {41   TicketDemo t=new TicketDemo();42   Thread t1=new Thread(t);43   Thread t2=new Thread(t);44   t1.start();45   t2.start();46  47  }48  49  50  51 }52 /*运行结果摘取:53   54   Thread[Thread-1,5,main]号售票员这是第156张票55 Thread[Thread-1,5,main]号售票员这是第155张票56 Thread[Thread-1,5,main]号售票员这是第154张票57 Thread[Thread-0,5,main]号售票员这是第153张票58 Thread[Thread-0,5,main]号售票员这是第152张票59 60 */61 62
View Code

 

转载于:https://www.cnblogs.com/ruoniao/p/5418589.html

你可能感兴趣的文章
刷前端面经笔记(三)
查看>>
android: 高德地图
查看>>
基于快速GeoHash,如何实现海量商品与商圈的高效匹配?
查看>>
Java多线程编程实战:模拟大量数据同步
查看>>
告别webpack react 搭建多页面之痛
查看>>
前嗅ForeSpider教程:链接抽取
查看>>
python奇遇记:深入理解装饰器
查看>>
web-push实现原理及细节介绍
查看>>
MongoDB 分片配置
查看>>
elasticsearch概念详解
查看>>
matplotlib Basic Usage
查看>>
高性能磁盘 I/O 开发学习笔记 -- 软件手段篇
查看>>
ueditor中的问题记录
查看>>
头部组件header.vue
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
创新技术重塑未来物联网
查看>>
庖丁解牛!深入剖析React Native下一代架构重构
查看>>
架构师的狂欢—ArchSummit深圳2016等您来约
查看>>
访谈Stuart Davidson:Skyscanner的持续交付推广
查看>>
Vue性能优化:如何实现延迟加载和代码拆分?
查看>>