java 线程数据同步

java 线程数据同步

由买票实例

//java线程实例
//线程数据同步
//卖票问题
//避免重复卖票

//线程
class xc1 implements Runnable{
    
    //定义为静态,可以使多个对象使用同一个数据
    public static int chepiao = 10;    //车票总数
    
    public static String aa = new String("123");    //字符串随意定义,定义在函数上面
    
    public void run(){
        
        while(true){
            
            //synchronized的作用是,让它所管辖的代码部分,要么全部执行完,要么全部不执行
            //synchronized既可以修饰代码块,又可以修饰方法
            //synchronized如果直接放在方法上使用。使用方法为  public synchronized 方法名
            //这里为什么要加(aa),原因在于,如果能得到aa,就执行
            synchronized(aa){    
                
                if(chepiao>0){
                    chepiao--;
                    System.out.println(Thread.currentThread().getName()+"车站,已经卖出第 "+(chepiao+1)+" 张车票");
                }
                else{
                    break;
                }
            }

        }
        
    }
}


public class Index{
    public static void main(String[] args){
        

        //线程1
        xc1 xc1 = new xc1();
        Thread xc1_Thread = new Thread(xc1);
        xc1_Thread.start();    //执行线程
        
        
        //线程2
        xc1 xc2 = new xc1();
        Thread xc2_Thread = new Thread(xc2);
        xc2_Thread.start();    //执行线程
        
        //线程3
        xc1 xc3 = new xc1();
        Thread xc3_Thread = new Thread(xc3);
        xc3_Thread.start();    //执行线程
 

    }
}
原文地址:https://www.cnblogs.com/phpyangbo/p/5964580.html