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

编写

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;
                }
            }

        }
    }
}

运行

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

时间: 2024-10-06 19:47:48

网络抢票synchronized同步票数(多线程,线程安全 )的相关文章

2015年春运网络抢票技巧和注意事项

视频播放地址:http://v.youku.com/v_show/id_XODQ2NzcyMjcy.html

多线程抢票系统浅析

笔者打算写个轻量版的秒杀系统,那么需要多线程模拟客户去抢购某个商品.故有想先写一个简单的多线程抢票系统加深一下对线程池,同步的理解. 1. 新建Java project,命名为ClientApp1, src文件夹里面新建demo文件夹. 项目结构如下, 2. 程序模拟的场景用例如下, 多个线程模拟多个客户去购买春运车票 每个客户购买车票[0,9],最少买0张,最多能买九张. 每个客户同步的买票,当某个线程在买票时,其他线程处于等待状态 所有客户线程买票完毕,主线程最后统计一共卖出多少张车票,切忌

归心似箭,IT达人分享抢票攻略

[51CTO专稿]随着春节一天天临近,“购票难”的问题也愈发凸显,猎豹.火狐.360等“春运抢票神器”占领了各大网站的重要版面,“技术抢票”成为炙手可热的话题,看看身为程序员的邓以克是如何抢到回家的票. 邓以克(@一路向西-phinecos)是一位进入IT行业3年的Java程序员:业务时间,比较喜欢研究技术,也写一些技术方面的文章. 其实去年12306推出以后,就有相应的刷票工具出来,邓以克谈到,自己也是从那个时候开始使用刷票工具,给 自己和身边的同事.朋友们顺利地买到回家的卧铺票的.今年,由于

JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this

JAVA之旅(十三)--线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this 我们继续上个篇幅接着讲线程的知识点 一.线程的安全性 当我们开启四个窗口(线程)把票陆陆续续的卖完了之后,我们要反思一下,这里面有没有安全隐患呢?在实际情况中,这种事情我们是必须要去考虑安全问题的,那我们模拟一下错误 package com.lgl.hellojava; import javax.security.auth.callback.TextInputCallback

第18章 多线程----线程同步

Java提供了线程同步的机制来防止资源访问的冲突. 1.线程安全 实际开发中,使用多线程程序的情况很多,如银行排号系统.火车站售票系统等.这种多线程的程序通常会发生问题. 以火车站售票系统为例,在代码中判断当前票数是否大于0,如果大于0则执行将该票出售给乘客功能,但当两个线程同时访问这段代码时(假如这时只剩下一张票),第一个线程将票售出,与此同时第二个线程也已经执行完成判断是否有票的操作,并得出结论票数大于0,于是它也执行售出操作,这样就会产生负数.所以在编写多线程程序时,应该考虑到线程安全问题

Java中的多线程 模拟网络抢票代码

一.抢票类: package cn.jbit.ticket; public class Ticket implements Runnable { private int num = 0; // 出票数 private int count = 10; // 剩余票数 boolean flag = false; @Override public void run() { while (true) { // 没有余票时,跳出循环 if (count <= 0) { break; } num++; co

Java多线程——线程之间的同步

Java多线程——线程之间的同步 摘要:本文主要学习多线程之间是如何同步的,以及如何使用synchronized关键字和volatile关键字. 部分内容来自以下博客: https://www.cnblogs.com/hapjin/p/5492880.html https://www.cnblogs.com/paddix/p/5367116.html https://www.cnblogs.com/paddix/p/5428507.html https://www.cnblogs.com/liu

java多线程下模拟抢票

我们设置三个对象分别同时抢20张票,利用多线程实现. 1 public class Web123506 implements Runnable{ 2 private int ticteksNums=20;//票数 3 4 @Override 5 public void run() { 6 while (true){ 7 if(ticteksNums<0){ 8 break; 9 } 10 /* try { 11 //睡眠 12 Thread.sleep(200); 13 } catch (Int

四、java多线程核心技术——synchronized同步方法与synchronized同步快

一.synchronized同步方法 论:"线程安全"与"非线程安全"是多线程的经典问题.synchronized()方法就是解决非线程安全的. 1.方法内的变量为线程安全 public void addI(String username) { try { int num = 0; \\方法内的变量为线程安全 if (username.equals("a")) { num = 100; System.out.println("a set