• 多线程静态同步函数的锁是class 对象


    /*
    	通过验证发现 同步函数如果被静态修饰后,不再以this 为锁
    
    	静态进内存时,内存中没有本类对象,但是一定有该类的字节码文件对象
    	类名.class  该对象的类型是class
    
    
    	静态的同步方法,使用的锁是该方法所在类的字节码文件对象。类名.class
    */
    
    class Ticket implements	Runnable
    {
    	private static int tick = 100;
    
    	boolean flag = true;
    
    	public void run()
    	{
    		if(flag)
    		{
    				while(true)
    				{
    				//	synchronized(this)
    					synchronized(Ticket.class)
    					{
    						if(tick>0)
    						{
    							try{Thread.sleep(10);}catch(Exception e){}
    							System.out.println(Thread.currentThread().getName() +" ..code..."+ tick--);
    
    						}
    					}
    				}
    		}
    		else
    			while(true)
    				show();//this.show();
    	
    	}
    	public  static synchronized void show()//静态同步函数 该类对应的字节码文件对象为锁
    	{
    		if(tick>0)
    		{
    			try{Thread.sleep(10);}catch(Exception e){}
    			System.out.println(Thread.currentThread().getName() +" .....show..."+ tick--);
    		}		
    	}
    
    }
    
    
    class StaticLockDemo
    {
    	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();	
    	}
    }

  • 相关阅读:
    树的重心备忘
    Hdu 2196
    HDU 1520
    TOJ1068 商务旅行
    携程HDU第一场1001
    USACO 4.3.2 The Primes
    Html常用标签的应用
    Html
    开班心得
    for循环练习及字符串处理
  • 原文地址:https://www.cnblogs.com/dengshiwei/p/4258521.html
Copyright © 2020-2023  润新知