• 线程同步,卖票


    </pre><pre name="code" class="java">/*
    通过分析,发现票号能打印出-1,-2的。
    多线程的运行出现了问题。
    问题原因:
    	当多条语句操作操作一个线程的共享数据时,一个线程对多条语句只执行一部分,还没有执行完,
    	另一个线程参与进来,导致共享数据出现问题。
    解决办法??:
    	对多条操作共享数据的语句,让一个执行完,执行过程中,其他线程不能参与。
    	synchronized(对象)
    	{
    		要同步代码
    	}
    */
    class Ticket implements Runnable
    {
    	private int ticket = 100;
    	Object obj = new Object();
    	public void run()
    	{
    		/*while(true)
    		{
    			if(ticket > 0)
    			{
    				try
    				{
    					Thread.sleep(10);
    				}
    				catch (InterruptedException ex)
    				{
    
    				}
    				///当A、B、C、D都进来,但是没执行输出,然后A执行后,恰好票为0,则就会出现负数,上面的代码是模拟此可能。
    				System.out.println(Thread.currentThread().getName() + "....sale:" + ticket--);
    			}
    		    //增加同步
    			synchronized(obj)
    			{
    				if(ticket > 0)
    				{
    					///当A、B、C、D都进来,但是没执行输出,然后A执行后,恰好票为0,则就会出现负数
    					System.out.println(Thread.currentThread().getName() + "....sale:" + ticket--);
    				}
    			}
    		}*/
    		
    		//测试二,此时是随机进行卖票,不会出现负数
    		while(ticket > 0)
    		{
    			System.out.println(Thread.currentThread().getName() + "....sale:" + ticket--);
    		}
    	}
    }
    class TicketDemo
    {
    	public static void main(String[] args) 
    	{
    		Ticket tc =new Ticket();
    		Thread t1 = new Thread(tc);
    		Thread t2 = new Thread(tc);
    		Thread t3 = new Thread(tc);
    		Thread t4 = new Thread(tc);
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    	}
    }
    

  • 相关阅读:
    链接的热键属性accesskey
    链接目标属性
    HTML添加多媒体或音乐
    HTML中的图像
    DreamweaverCS6
    HTML其他基本格式说明
    HTML页面主体常用设置
    网页设计与开发的过程
    文字排版
    选择器
  • 原文地址:https://www.cnblogs.com/dengshiwei/p/4258468.html
Copyright © 2020-2023  润新知