静态方法的同步代码
2015-09-29 21:03
211 查看
class Ticket implements Runnable
{
private int tick = 1000;
//Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)//第一个进入的线程实行下面代码
{
while(true)
{
//synchronized(obj)//由于同步函数的是以this对象为锁的 此处如果使用obj对象作为锁
//则不能实现同步 输出的数据会出现错误 程序的安全性不能得到保证
synchronized(Ticket.class)//和下面的show函数使用同样的锁 可以保证同步
{
if(tick>0)
{
try{Thread.sleep(40);}catch(Exception e){}
System.out.println(Thread.currentThread().getName() +" .....code..."+ tick--);
}
}
}
}//第二个进入的代码实行下面代码
else
while(true)
show();//this.show();
}
public
static synchronized void show()//同步函数 以this为锁
{
if(tick>0)
{
try{Thread.sleep(40);}catch(Exception e){}
System.out.println(Thread.currentThread().getName() +" .....show..."+ tick--);
}
}
}
class ThisLockDemo
{
public static void main(String []args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();//开启第一个线程 但不一定马上执行
t.flag = false;//改变标志
try{Thread.sleep(40);}catch(Exception e){}//让主线程睡眠40毫秒 保证第一个线程先开始运行 且标志位改变
t2.start();
}
}
{
private int tick = 1000;
//Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)//第一个进入的线程实行下面代码
{
while(true)
{
//synchronized(obj)//由于同步函数的是以this对象为锁的 此处如果使用obj对象作为锁
//则不能实现同步 输出的数据会出现错误 程序的安全性不能得到保证
synchronized(Ticket.class)//和下面的show函数使用同样的锁 可以保证同步
{
if(tick>0)
{
try{Thread.sleep(40);}catch(Exception e){}
System.out.println(Thread.currentThread().getName() +" .....code..."+ tick--);
}
}
}
}//第二个进入的代码实行下面代码
else
while(true)
show();//this.show();
}
public
static synchronized void show()//同步函数 以this为锁
{
if(tick>0)
{
try{Thread.sleep(40);}catch(Exception e){}
System.out.println(Thread.currentThread().getName() +" .....show..."+ tick--);
}
}
}
class ThisLockDemo
{
public static void main(String []args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();//开启第一个线程 但不一定马上执行
t.flag = false;//改变标志
try{Thread.sleep(40);}catch(Exception e){}//让主线程睡眠40毫秒 保证第一个线程先开始运行 且标志位改变
t2.start();
}
}
相关文章推荐
- 个人博客作业Week2 是否需要有代码规范
- Go 面向对象概念
- 结对项目代码复审
- 使用 native2ascii.exe 将java utf-8编码批量转换为 ANSI.
- 一起talk C栗子吧(第四十九回:C语言实例--最小生成树一)
- test8.17
- C++基类,派生类,同名覆盖原则
- C#动态属性(.NET Framework4.5支持)
- Ubuntu14.04配置jdk环境
- java String 和 int 相互转换
- 定制带第三方库的python,解决spark/hadoop环境中sklearn的调用问题
- params关键字[C#]
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- Python计算出给定的时间段的具体日期列表-大全
- 圆上最长距离
- Google Chrome 浏览器怎么找到看完视频之后那个缓存文件 谢谢
- 《机器学习实战》笔记之十三——利用PCA来简化数据
- Struts中对通配符的配置说明
- Python使用shape计算矩阵的行和列
- #个人博客作业week2——关于代码规范的个人观点