Java多线程静态函数的锁

package multithreading;
//引入bxdteacher的代码
/*
静态的同步函数使用的锁是 该函数所属字节码文件对象
可以用 getClass方法获取,也可以用当前 类名.class 表示。

*/

class Ticket2 implements Runnable
{
	private static  int num = 100;
//	Object obj = new Object();
	boolean flag = true;
	public void run()
	{
//		System.out.println("this:"+this.getClass());

		if(flag)
			while(true)
			{
				synchronized(Ticket2.class)//(this.getClass())
				{
					if(num>0)
					{
						try{Thread.sleep(10);}catch (InterruptedException e){}						
						System.out.println(Thread.currentThread().getName()+".....obj...."+num--);
					}
				}
			}
		else
			while(true)
				this.show();
	}

	public static synchronized void show()//一进去有一个对象,当前class文件所属的对象,这个对象是同步静态函数所使用的锁
	//java对字节码文件进内存先放入对象,所有对象的建立都有自己所属的字节码文件对象(getclass()方法获取)
	{
		if(num>0)
		{
			try{Thread.sleep(10);}catch (InterruptedException e){}
			
			System.out.println(Thread.currentThread().getName()+".....function...."+num--);
		}
	}
}

class StaticSynFunctionLockDemo 
{
	public static void main(String[] args) 
	{
		Ticket2 t = new Ticket2();
		//两种获取字节码文件对象的方法
//		Class clazz = t.getClass(); //一种创建对象去获取
//		Class clazz = Ticket.class;//另外一种直接获取该字节码文件的字节码文件对象
		
//		System.out.println("t:"+t.getClass());

		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);

		t1.start();
		try{Thread.sleep(10);}catch(InterruptedException e){}
		t.flag = false;
		t2.start();
	}
}

你可能感兴趣的:(多线程)