您的位置:首页 > 编程语言

静态方法的同步代码

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: