問題描述

業(yè)務(wù)有一個需求,我把問題描述一下:

通過代理IP訪問國外某網(wǎng)站N,每個IP對應(yīng)一個固定的網(wǎng)站N的COOKIE,COOKIE有失效時間。

并發(fā)下,取IP是有一定策略的,取到IP之后拿IP對應(yīng)的COOKIE,發(fā)現(xiàn)COOKIE超過失效時間,則調(diào)用腳本訪問網(wǎng)站N獲取一次數(shù)據(jù)。

為了防止多線程取到同一個IP,同時發(fā)現(xiàn)該IP對應(yīng)的COOKIE失效,同時去調(diào)用腳本更新COOKIE,針對IP加了鎖。為了保證鎖的全局唯一性,在鎖前面加了標(biāo)識業(yè)務(wù)的前綴,使用synchronized(lock){...}的方式,鎖住"鎖前綴+IP",這樣保證多線程取到同一個IP,也只有一個IP會更新COOKIE。

不知道這個問題有沒有說清楚,沒說清楚沒關(guān)系,寫一段測試代碼:

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

public class StringThread implements Runnable {    private static final String LOCK_PREFIX = "XXX---";    
    private String ip;    
    public StringThread(String ip) {        this.ip = ip;
    }

    @Override    public void run() {
        String lock = buildLock();        synchronized (lock) {
            System.out.println("[" + JdkUtil.getThreadName() + "]開始運行了");            // 休眠5秒模擬腳本調(diào)用
&nbs
        
		

網(wǎng)友評論