黑马程序员技术交流社区
标题:
静态锁机制
[打印本页]
作者:
男人你得有范
时间:
2014-8-29 23:40
标题:
静态锁机制
/*
* 如果同步函数被静态所修饰后,使用的锁是什么?
*
* 通过验证发现使用的锁不再是this,因为静态方法中也不可以定义this
*
* 静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象。
* 类名.class 该对象的类型是Class
*
* 静态同步方法使用的锁是该方法所在类的字节码文件对象。类名.class
* */
class Ticket3 implements Runnable
{
private static int tick = 1000;
//Object obj = new Object();
boolean flag = true;
public void run()
{
if (flag)
{
while (true)
{
synchronized (Ticket3.class)
{
if (tick > 0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
}
System.out.println(Thread.currentThread().getName()
+ "----code sale---------:" + tick--);
}
}
}
}
else
while (true)
show();
}
//同步函数被static所修饰
public static synchronized void show()
{
if (tick > 0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
}
System.out.println(Thread.currentThread().getName() + "----sale:"
+ tick--);
}
}
}
public class StaticLockDemo
{
public static void main(String[] args)
{
Ticket3 t = new Ticket3();// 不是一个线程
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(100);
}
catch(Exception e)
{
}
t.flag = false;
t2.start();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2