重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
最好不要用java寫秒殺器,因?yàn)槟憔退阌?httpclient 拿到的也是未經(jīng)過渲染的html頁面,很多頁面js都沒有加載,你根本不知道渲染之后的頁面長(zhǎng)什么樣子,你最好學(xué)學(xué)木魚的火車票搶票助手,他用的是 firefox 的插件 scriptish 來寫搶票腳本,其實(shí)搶票跟秒殺是一個(gè)原理的,我第一個(gè)秒的程序就是照著他的程序改的,用這個(gè)上手也比較容易,但是要求你對(duì)javascript比較熟悉,不過比用java實(shí)現(xiàn)靠譜多了
十余年的和平網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整和平建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“和平網(wǎng)站設(shè)計(jì)”,“和平網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
import java.util.Scanner;
/**
* @author a href="mailto:116982086@qq.com"/a
*/
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入消費(fèi)金額");
double sum = scanner.nextDouble();
String what = null;
// 如果消費(fèi)金額大于50才提示換購(gòu)
if (sum = 50) {
System.out.println("是否參加優(yōu)惠換購(gòu)活動(dòng):");
System.out.println("1:滿50元,加2元換購(gòu)百事可樂飲料一瓶");
if (sum = 100) {
System.out.println("2:滿100元,加3元換購(gòu)500ml可樂一瓶");
System.out.println("3:滿100元,加3元換購(gòu)500ml可樂一瓶");
}
if (sum = 200) {
System.out.println("4:滿200元,加10元可換購(gòu)1歌蘇泊爾炒菜鍋");
System.out.println("5:滿200元,加20元可換購(gòu)歐萊雅爽膚水一瓶");
}
System.out.println("0:不換購(gòu)");
System.out.println("請(qǐng)選擇:");
int choice = scanner.nextInt();
int add = 0;
switch (choice) {
case 1:
add = 2;
what = "500ml可樂一瓶";
break;
case 2:
add = 3;
what = "500ml可樂一瓶";
break;
case 3:
add = 3;
what = "5公斤面粉";
break;
case 4:
add = 10;
what = "一個(gè)歌蘇泊爾炒菜鍋";
break;
case 5:
add = 20;
what = "歐萊雅爽膚水一瓶";
break;
default:
break;
}
sum += add;
}
System.out.println("本次消費(fèi)總金額: " + sum);
if (null != what) {
System.out.println("成功換購(gòu) " + what);
}
}
}
public class Lucky {
public static void main(String[] args){
System.out.println("請(qǐng)輸入您的4位會(huì)員卡號(hào):");
Scanner sc = new Scanner(System.in);
int number = sc.nextInt(); //接收用戶從控制臺(tái)輸入的會(huì)員卡號(hào),并保存在會(huì)員卡號(hào)變量中
int a = number/1000; //千位
int b = number%1000/100; //百位
int c = number%100/10; //十位
int d = number%10; //個(gè)位
if((a+b+c+d)20){
System.out.println("恭喜中獎(jiǎng)!您是幸運(yùn)客戶");
}else{
System.out.println("謝謝參與!");
}
}
}
最基礎(chǔ)的 沒有異常判斷 無限循環(huán)輸入什么東西
不考慮多服務(wù)器,限制線程池的大小和隊(duì)列的限制來實(shí)現(xiàn)。
代碼如下:
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;
/**
*?單服務(wù)器用線程池實(shí)現(xiàn)秒殺的思路一
*?
*?@author?zhanghaijun
*?
*/
public?class?ExecutorsTest?{
public?static?boolean?flag?=?true;?//?秒殺物品的標(biāo)記
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;
}
}
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();
//程序運(yùn)行后立刻執(zhí)行任務(wù),每隔1000ms執(zhí)行一次
timer.schedule(t, 0, 1000);
}
@Override
public void run() {
System.out.println("在此處調(diào)用插入數(shù)據(jù)庫的方法");
}
}
首先說 隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)你應(yīng)該了解吧 。
可以用JDK自帶的 或者自己實(shí)現(xiàn)的也行,你問的如何實(shí)現(xiàn)隊(duì)列是指的隊(duì)列這中數(shù)據(jù)結(jié)構(gòu)? 如果是 ,那你還是自己看數(shù)據(jù)結(jié)構(gòu)那本書,原理都一樣 跟語言無關(guān), 你可用JDK自帶的幾種隊(duì)列 查看JDKAPI文檔 實(shí)現(xiàn)了Queue接口的各種隊(duì)列基本都有,比如 線程安全的 ConcurrentLinkedQueue 這個(gè)是一個(gè)無界的線程安全的隊(duì)列 或者 ArrayBlockingQueue 這個(gè)隊(duì)列實(shí)現(xiàn)是一個(gè)有界阻塞隊(duì)列 都能夠?qū)崿F(xiàn)你說的 或者 你用非線程安全的也成 只不過你自己控制線程的安全性就好了;.