java 线程学习(1)(二)

2014-11-24 03:14:05 · 作者: · 浏览: 1
/

/*

//如果同步函数是静态函数,使用的锁是什么呢?

//不在是this,因为静态方法中也不可以定义this

//静态进内存是,内存中没有本类对象,但是一定有该类对应的字节码文件对象

//类名.class 该对象的类型是Class

//静态的同步方法,使用的锁是该方法所在类的字节码文件对象:类名.class

class Ticket implements Runnable

{

private static int ticket=100;

Object obj=new Object();

boolean flag=true;

public void run()

{

if(flag)

{

while(true)

{

synchronized(Ticket.class) //两个线程为同一个锁:安全 换成obj的话为两个锁:不完全

{

if(ticket>0)

{

try{Thread.sleep(10);}catch(Exception e){}

System.out.println(Thread.currentThread().getName()+"---sale "+ticket--);

}

}

}

}

else

while(true)

show();

}

public static synchronized void show()

{

if(ticket>0)

{

try{Thread.sleep(10);}catch(Exception e){}

System.out.println(Thread.currentThread().getName()+"----show---"+ticket--);

}

}

}

class Test

{

public static void main(String[] args)

{

Ticket t=new Ticket();

Thread t1=new Thread(t);

Thread t2=new Thread(t);

t1.start();

try{Thread.sleep(10);}catch(Exception e){}

t.flag=false;

t2.start();

}

}

*/


摘自 一路向北