最好不要用java寫秒殺器,因為你就算用 httpclient 拿到的也是未經(jīng)過渲染的html頁面,很多頁面js都沒有加載,你根本不知道渲染之后的頁面長什么樣子,你最好學學木魚的火車票搶票助手,他用的是 firefox 的插件 scriptish 來寫搶票腳本,其實搶票跟秒殺是一個原理的,我第一個秒的程序就是照著他的程序改的,用這個上手也比較容易,但是要求你對javascript比較熟悉,不過比用java實現(xiàn)靠譜多了
創(chuàng)新互聯(lián)建站是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設、成都外貿(mào)網(wǎng)站建設與策劃設計,安仁網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設十多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:安仁等地區(qū)。安仁做網(wǎng)站價格咨詢:13518219792
不考慮多服務器,限制線程池的大小和隊列的限制來實現(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;
/**
*?單服務器用線程池實現(xiàn)秒殺的思路一
*?
*?@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;
}
}
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();
//程序運行后立刻執(zhí)行任務,每隔1000ms執(zhí)行一次
timer.schedule(t, 0, 1000);
}
@Override
public void run() {
System.out.println("在此處調(diào)用插入數(shù)據(jù)庫的方法");
}
}
你剛寫出了,位置指針就向前移動了,我們需要把指針拉回去。
raf.seek(0);
System.out.println((raf.readByte()));
raf.seek(1);
System.out.println(raf.readInt());
輸出:
97
3
你一共才向文件中寫了2個東西,卻想讀取第5個位置的東西。