码迷,mamicode.com
首页 > 编程语言 > 详细

网络抢票synchronized同步票数(多线程,线程安全 )

时间:2019-03-10 09:22:15      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:art   read   err   运行   使用   return   void   style   name   

编写

package com.Input_Output.I_O2;
    
/**
 *     车站抢票 同步代码synchronized
 * @author zzh
 *
 */
public class Ticket {
    public static void main(String[] args) {
        //抢票的对象
        User u=new User();                //同一个线程
        Thread t1=new Thread(u,"小红");
        Thread t2=new Thread(u,"小强");
        Thread t3=new Thread(u,"黄牛");
        
        
        t1.start();
        t2.start();
        t3.start();
    }
}


/**
 *     抢票的用户的线程
 */
class User implements Runnable{
    private int num;        //抢到的第几张票
    private int count=20;    //余票

    /**
     *     抢票
     */
    public void run() {
        while(true) {
            try {
                Thread.sleep(300);                    //模拟网络延迟
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
            synchronized (this) {                    //同步代码块    一次只能有一个线程使用代码块
                if(count<=0) {
                    break;
                }
                num++;
                count--;
                System.out.println(Thread.currentThread().getName()+"抢到了第"+num+"张票,还剩"+count+"张票");
                if(Thread.currentThread().getName().equals("黄牛")) {
                    return;
                }
            }
            
        }
    }
}

 

运行

技术图片

 

网络抢票synchronized同步票数(多线程,线程安全 )

标签:art   read   err   运行   使用   return   void   style   name   

原文地址:https://www.cnblogs.com/zzh630/p/10503954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!