zoukankan      html  css  js  c++  java
  • java:同步和死锁

    多个线程共享一个资源的时候需要进行同步(否则会出现错误:如负数,重复数),但是过多的同步会造成死锁.

    synchronized(this)

    {

    }

    非同步情况:

    public class SyncThread implements Runnable {
    
    	private int titick = 5;
    	
    	@Override
    	public void run() {
    		// TODO 自动生成的方法存根
    		
    		for(int i = 0; i <50; i++)
    		{
    			
    				if( this.titick > 0 )
    				{
    					//如果遇到延时情况,就会出错
    					try {
    						Thread.sleep(300);
    					} catch (InterruptedException e) {
    						// TODO 自动生成的 catch 块
    						e.printStackTrace();
    					}
    					
    					System.out.println("卖出去第:" + this.titick-- + "张票");
    				}
    			}		
    		
    	}
    
    	
    }
    
    public class Demo {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		
    		SyncThread st = new SyncThread();
    		new Thread(st, "票贩子A").start();
    		new Thread(st, "票贩子B").start();
    		new Thread(st, "票贩子C").start();
    
    	}
    
    }
    

    结果:

      

    同步情况:

    public class SyncThread2 implements Runnable {
    
    	private int titict = 5;
    	
    	@Override
    	public void run() {
    		// TODO 自动生成的方法存根
    		
    		for(int i = 0; i < 50; i++)
    		{
    			synchronized(this)
    			{
    				if( this.titict > 0)
    				{
    					try {
    						Thread.sleep(300);
    					} catch (InterruptedException e) {
    						// TODO 自动生成的 catch 块
    						e.printStackTrace();
    					}
    					System.out.println("卖出:"+ this.titict--);
    				}
    			}
    		}
    
    	}
    
    }
    
    public class Demo2 {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    
    		SyncThread2 sy2 = new SyncThread2();
    		new Thread(sy2, "票贩子1").start();
    		new Thread(sy2, "票贩子2").start();
    		new Thread(sy2, "票贩子3").start();
    		
    	}
    
    }
    

      结果:

  • 相关阅读:
    linux安装mysql
    yum命令
    java启动jar包中的指定类
    linux系统配置参数修改
    iconfont阿里巴巴矢量图标库批量保存
    Python 使用Pandas读取Excel的学习笔记
    在Ubuntu18.04的Docker中安装Oracle镜像及简单使用
    Eclipse 安装PyDev开发Python及初步使用
    Python打包工具
    MacOS下打包Python应用
  • 原文地址:https://www.cnblogs.com/achengmu/p/6158331.html
Copyright © 2011-2022 走看看