人醜就要多讀書(14)

上週接金立的sdk,客戶端這邊做了很多服務器端的工作,導致我們這邊收不到pay_id,雖然沒什麼問題,不知道對於最後的訂單校驗有影響沒。然後我們這邊簽名錯誤了,與服務器上傳下來的簽名比對錯誤,我自作聰明的吧所有參數拿下來,用postman發給自己測試,但是在校驗Base64.decode(sign)的時候報錯了,具體錯誤是length not correct:got 126 but was expect 128,簡單的說就是Base64.decode(sign)搞出來的是byte[]126,而實際需要的是128報的錯,直接就沒法校驗了,but服務器上卻可以校驗,只不過是校驗出錯了,今天回來在導師的幫助了,發現了,原來我把服務器上的sign直接複製下來,通過postman發給自己的時候,'+'變成了' ',加號變成了空格,導致直接沒法校驗,後來replaceAll("+"," ")之後,就可以了。最後的問題再看了金立提供的文檔之後發現了,就是notifyUrl我們加了參數,但是校驗的時候拿掉,簽名就通過了。

今天在真神的幫助下還把通告的重複發送完成了,對線程又稍微理解了一下。需求:我們需要往不同的服務器通過指定的時間間隔,發送一定數量的通告,然後我在怎麼創建線程、然後將所有服一起發的時候卡住了,因爲Thread.sleep(1000miles)的時候把主線程也給停了,導致不是同時發的,後來真神發我一個demo,看了下大受啓發。發現不同的方法調用後所傳維護的Thread是不用的,然後終於完成了 !

package sql;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by chuancong.yan on 2015/8/31.
 */
public class ThreadTest {
    public static void task(int number){
        List<Thread> list = new ArrayList<Thread>();
        for(int i = 0; i < number; i++){
            Thread thread = new Thread(new TimerTask(10000, 3, i+""));
            thread.start();
            list.add(thread);
        }
    }

    public static void main(String[] args) throws InterruptedException{
        task(3);
        while(true){
            System.out.println("1111111111111111");
            Thread.sleep(1000);
        }
    }
}

class  TimerTask implements Runnable {
    private long sleepTime;
    private int times;
    private String message;

    public TimerTask(long sleepTime, int times, String message) {
        this.sleepTime = sleepTime;
        this.times = times;
        this.message = message;
    }

    @Override
    public void run() {
        int i =0;
        while(i < times){
            System.out.println(message);
            i++;
            try {
                Thread.sleep(sleepTime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章