您的位置:

Java秒杀,java秒杀如何防止超卖

本文目录一览:

JAVA秒杀怎么解决

具体的业务还是得需要你自己定制.\x0d你的需求实际上是一个变形的生产者-消费者实现.

对于此类需求,主要是将请求和实际的处理过程解耦,一般都是采取异步的方式来通知请求方,

这跟用不用redis其实没有多大的关系.一般的实现方法是你需要将用户的请求封装成一个Task,

然后将这个Task再push到redis队列,然后后端的worker.php完全可以多进程、

多线程的并发处理Task并将处理结果回调给请求方.这里唯一麻烦点的就是这个Task的设计,

需要能够包含请求信息(请求内容,请求方标识等等).

java秒杀并发怎么处理

用redis,比如秒杀一个商品,把该商品的信息放在redis中,主要是那个库存量,抢购的时候在redis中操作数据非常快,每秒差不多8万次读写操作,这样的并发量已经够用了

java中秒杀使用的队列

首先说 队列这种数据结构你应该了解吧 。

可以用JDK自带的 或者自己实现的也行,你问的如何实现队列是指的队列这中数据结构? 如果是 ,那你还是自己看数据结构那本书,原理都一样 跟语言无关, 你可用JDK自带的几种队列 查看JDKAPI文档 实现了Queue接口的各种队列基本都有,比如 线程安全的 ConcurrentLinkedQueue 这个是一个无界的线程安全的队列 或者 ArrayBlockingQueue 这个队列实现是一个有界阻塞队列 都能够实现你说的 或者 你用非线程安全的也成 只不过你自己控制线程的安全性就好了;.

java秒杀怎么操作数据库

import java.util.Timer;

import java.util.TimerTask;

public class Test extends TimerTask {

public static void main(String[] args) {

Timer timer = new Timer();

Test t=new Test();

//程序运行后立刻执行任务,每隔1000ms执行一次

timer.schedule(t, 0, 1000);

}

@Override

public void run() {

System.out.println("在此处调用插入数据库的方法");

}

}

用java如何实现秒杀流程啊

不考虑多服务器,限制线程池的大小和队列的限制来实现。

代码如下:

package org.zhang;

 

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.Executors;

import java.util.concurrent.SynchronousQueue;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

 

/**

 * 单服务器用线程池实现秒杀的思路一

 * 

 * @author zhanghaijun

 * 

 */

public class ExecutorsTest {

 

    public static boolean flag = true; // 秒杀物品的标记

 

    public static void main(String[] args) {

        ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 1, 0L,

                TimeUnit.MILLISECONDS, new SynchronousQueueRunnable());

        ThreadTest t1 = new ThreadTest("张三");

        ThreadTest t2 = new ThreadTest("李四");

        ThreadTest t3 = new ThreadTest("王五");

        try {

            pool.execute(t1);

        } catch (Exception e) {

            System.out.println(t1.getUserName() + "没有抢到");

        }

 

        try {

            pool.execute(t3);

        } catch (Exception e) {

            System.out.println(t3.getUserName() + "没有抢到");

        }

 

        try {

            pool.execute(t2);

        } catch (Exception e) {

            System.out.println(t2.getUserName() + "没有抢到");

        }

        pool.shutdown();

    }

 

}

 

class ThreadTest extends Thread {

 

    private String userName;

 

    public ThreadTest(String userName) {

        super();

        this.userName = userName;

    }

 

    @Override

    public void run() {

        try {

            Thread.sleep(200);

            if (ExecutorsTest.flag) {

                System.out.println(this.userName + "秒杀成功");

                ExecutorsTest.flag = false;

            }

 

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

    }

 

    public String getUserName() {

        return userName;

    }

 

    public void setUserName(String userName) {

        this.userName = userName;

    }

 

}

用JAVA怎么写一个秒杀器。求具体代码

最好不要用java写秒杀器,因为你就算用 httpclient 拿到的也是未经过渲染的html页面,很多页面js都没有加载,你根本不知道渲染之后的页面长什么样子,你最好学学木鱼的火车票抢票助手,他用的是 firefox 的插件 scriptish 来写抢票脚本,其实抢票跟秒杀是一个原理的,我第一个秒的程序就是照着他的程序改的,用这个上手也比较容易,但是要求你对javascript比较熟悉,不过比用java实现靠谱多了