/*  内容:同步代码块,目的是解决多线程中的安全问题。什么安全问题呢??就是在执行run方法时,假如线程-0刚刚获得执行权,
*还没执行时,就挂那了,这时线程-1获得执行权,并进行执行,就有可能出现负数票的情况。
*原因:当一个线程执行run方法时,线程1操作共享数据时,失去了cpu执行权,导致线程2执行run方法,从而导致共享数据错误。
* 解决办法:给多线程所要执行的代码加上锁。当一个线程执行run方法时,锁上锁,即使失去CPU执行权,
*从而使其他线程不能执行run方法;
* synchronized(对象_){同步代码}:同步代码块,其中包含多线程共同执行的代码,此代码被同步.
* 其中的对象就像一个锁.即使执行同步代码的线程失去CPU执行权,其他线程也会被锁在外面不能执行同步代码
* 疑惑:obj对象??/毕老师当时没讲,只说了可以是任意对象,他直接调用的object上帝类建立了对象;
* 例子:火车中的厕所
* 同步前提:1,必须有两个或者两个以上的线程
* 2,这些线程必须是使用的同一个锁.(原因举例:3,4节车厢的厕所,不是同一个锁,线程1,线程2可以同时进入3,4节车厢的厕所,不能达到同步的目的.
*好出:解决了多线程的安全问题
*弊端:每次都得判断锁,浪费了资源.
*/
package ThreadDemoOne;
class TicketDemo implements Runnable
{
int ticket=1000;
Object obj =new Object();
public void run()
{
while(true)
{
synchronized(obj)//obj就是一个锁,这里的synchronized就是同步代码块.括起来的就是线程需要一次性执行完的代码.
{ if(ticket>0)
{
System.out.println(Thread.currentThread()+"号售票员"+"这是第"+this .ticket+"张票");
ticket--;
}
} }
}
}
public class ThreadDemo6
{
public static void main(String[] args )
{
TicketDemo t=new TicketDemo();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
t2.start(); } }
/*运行结果摘取: Thread[Thread-1,5,main]号售票员这是第156张票
Thread[Thread-1,5,main]号售票员这是第155张票
Thread[Thread-1,5,main]号售票员这是第154张票
Thread[Thread-0,5,main]号售票员这是第153张票
Thread[Thread-0,5,main]号售票员这是第152张票 */

最新文章

  1. Freemarker判断是否为空
  2. BlackBerry 9900刷机
  3. Microsoft Azure News(1) 新的数据中心Japan East, Japan West and Brazil South
  4. ISP接口隔离原则
  5. 【BZOJ 3527】【ZJOI 2014】力
  6. css3中的几何图形shape研究
  7. Angular.js+Bootstrap实现手风琴菜单
  8. 如何在本机上将localhost改为www.dev.com
  9. 如何去除内联元素(inline-block元素)之间的间距(转载)
  10. Entity Framework Code First 常用方法集成
  11. JNI学习总结
  12. 可编辑DIV (contenteditable="true") 在鼠标光标处插入图片或者文字
  13. Flocker 做为后端存储代理 docker volume-driver 支持
  14. 使用html元素的getBoundingClientRect来获取dom元素的时时位置和大小
  15. CodeForce-955C
  16. 【BZOJ3142】[HNOI2013]数列(组合计数)
  17. css学习_css清除浮动
  18. 有一个VC的bug:非标准语法
  19. wx.Panel
  20. SQL优化(转)

热门文章

  1. jQuery常见的几个文档处理方式
  2. easyui之自定义字体图标(鼠标覆盖时切换颜色)
  3. 配置web pack loader 报错:Module build failed: Error: The node API for `babel` has been moved to `babel-core`.
  4. 在windows下Apache安装配置
  5. OOP和面向对象
  6. 小程序:最难点For的wx:key
  7. Java 集合Collection与List的详解
  8. python导入import
  9. Crystal Reports报表使用 [一]
  10. nginx 服务脚本编写模板