基础篇_线程 第5集 多线程的安全问题--解决之道同步函数
2016-05-05 00:01
531 查看
同步函数--卖票示例
同步函数用是哪一个锁呢??---this
函数需要被对象调用。那么函数都有一个所属对象引用。就是this。
通过该程序进行验证。
使用两个线程来卖票。
一个线程在同步函数中,一个在同步代码块中。
都在执行卖票动作。
同步函数用是哪一个锁呢??---this
函数需要被对象调用。那么函数都有一个所属对象引用。就是this。
通过该程序进行验证。
使用两个线程来卖票。
一个线程在同步函数中,一个在同步代码块中。
都在执行卖票动作。
class Ticket2 implements Runnable //extends Thread { private int tick=100; Object obj=new Object(); boolean flag=true; public void run() { if(flag) { while(true) { synchronized(this) { if(tick>0) { try {Thread.sleep(10);} catch (Exception e) {} System.out.println(Thread.currentThread().getName()+" code "+tick--); } } } } else while(true) show(); } public synchronized void show()//同步函数用的锁是哪一个呢?this { if(tick>0) { try {Thread.sleep(10);} catch (Exception e) {} System.out.println(Thread.currentThread().getName()+" show "+tick--); } } } public class ThisLockDemo { public static void main(String[] args) { Ticket2 t=new Ticket2(); Thread t1=new Thread(t);//创建了一个线程 Thread t2=new Thread(t);//创建了一个线程 // Thread t3=new Thread(t);//创建了一个线程 // Thread t4=new Thread(t);//创建了一个线程 t1.start(); try {Thread.sleep(10);} catch (Exception e){} t.flag=false; t2.start(); // t3.start(); // t4.start(); } }
相关文章推荐
- Git系列笔记之五:标签管理
- 将session保存到redis中的方法
- laydate官网初始化加载控制的问题
- 二进制中1的个数
- iOS中UIView半边圆角设置
- libcurl 编译静态库
- cmake简单使用
- 是否为电子邮件地址 检测是否为手机号码 是否为数字 是否为整数 是否为正数 是否为合法的日期格式
- Apache服务网络威胁及处理方案(1)
- Apache安全配置
- Apache安全和强化技巧
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-使用工厂创建代理(Using the ProxyFactoryObject to create AOP proxies)
- JSPatch真强大!
- 前端学习路线图
- HTML
- CSS
- IDEA打开就闪退或无反应
- Apusic启动项目在cmd窗口中出现“命令行太长”错误
- PowerDesigner15.1导出数据操作
- IDEA怎么查看现在的项目使用的JDK版本? 2016年4月19日22:51