zoukankan      html  css  js  c++  java
  • 多线程并发安全问题 synchronized

    package thread;
    
    
    /**
     * 多线程并发安全问题   synchronized
     * 当多个线程并发访问统一资源时,由于线程切换实际的
     * 不确定性会导致操作顺序违背代码设计的执行流程而出现混乱
     * 严重时可能导致系统瘫痪
     * 
     * @author 清风已来
     *
     */
    
    public class synDemo1 {
    	public static void main(String[] args) {
    		final Table table =new Table();
    		Thread t1 =new Thread() {
    			public void run() {
    				while(true) {
    					int bean =table.getBean();
    					Thread.yield();
    					System.out.println(getName()+":"+bean);
    				}
    			}
    		};
    		Thread t2 =new Thread() {
    			public void run() {
    				while(true) {
    					int bean =table.getBean();
    					Thread.yield();
    					System.out.println(getName()+":"+bean);
    				}
    			}
    		};
    		t1.start();
    		t2.start();
    	}
    }
    class  Table{
    	private int beans =20;
    	/*
    	 * 当一个方法被synchronized修饰后,该方法称为同步方法,即:
    	 * 多个线程不能同时在方法内部执行
    	 * 
    	 */
    	public synchronized int   getBean() {
    		if(beans==0) {
    			throw new RuntimeException("没有豆子了");
    		}
    		Thread.yield();
    		return beans--;
    	}
    }
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    

      

  • 相关阅读:
    第三次作业附加
    第三次作业(计算器第一步)
    课程学生列表
    第二次作业
    《面向对象程序设计》第一次作业
    期末总结
    最后的总成绩
    第七次作业
    第六次作业(团队作业)
    第五次成绩
  • 原文地址:https://www.cnblogs.com/xyk1987/p/8288802.html
Copyright © 2011-2022 走看看