package process;
/*
*如果同步函数被静态修饰后,使用的锁是什么呢?
*通过验证,发现不是this,因为静态方法中不可以定义this
*
*静态进内存时,内存中没有本类对象,但是一定有改类对应的字节码文件对象;
*类名。class;该对象的类型是class;
*
*静态的同步方法使用的锁是,该方法所在类的字节码文件对象。类名.class
*/
class Ticket4 implements Runnable{
public static int tick = 100;
boolean flag = true;
int i = 0;
@Override
public void run() {
if(flag){
while(true){
synchronized(Ticket4.class){
if(tick > 0){
System.out.println(Thread.currentThread().getName() + "sale: " + tick--);
}
}
}
}else{
show();
}
}
public static synchronized void show(){
if(tick > 0){
System.out.println( Thread.currentThread().getName() + "sale: " + tick--);
}
}
}
public class StaticThreadDemo {
public static void main(String[] args){
Tickets t = new Tickets();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}