Как реализовать очередь интернет-кадров

Я пытаюсь осуществить очередь вторжения, которые должны быть выполнены один за другим (означающее следующее в очередь выполнит после завершения другого) во время асинхронной задачи. Я написал менеджер, чтобы управлять этими интервалами и задачей, которая является прогонкой. Затем я получаю первую задачу в асинхронной задаче и запустите ее в надежде, что она будет проходить через очередь, однако он просто заканчивается первым прогонком дважды. Может ли кто-нибудь помочь мне с кодом, с которым я работал или указываю на пример, который может помочь?

public class ConnectionManager {

    public static final int MAX_CONNECTIONS = 15;

    private ArrayList<Runnable> active = new ArrayList<Runnable>();
    private ArrayList<Runnable> queue = new ArrayList<Runnable>();

    private static ConnectionManager instance;

    public static ConnectionManager getInstance() {
        if (instance == null)
            instance = new ConnectionManager();
        return instance;
    }

    public void push(Runnable runnable) {
        queue.add(runnable);
        if (active.size() < MAX_CONNECTIONS)
            startNext();
    }

    private void startNext() {
        if (!queue.isEmpty()) {
            Runnable next = queue.get(0);
            queue.remove(0);
            active.add(next);

            Thread thread = new Thread(next);
            thread.start();
        }
    }

    public void didComplete(Runnable runnable) {
        active.remove(runnable);
        startNext();
    }
}

public class Task implements Runnable {
    Context con;
    String xmlFile;
    File taskFile;
    String Id;

    public void create(Context context, String xml, File task, String id) {
        this.con = context;
        this.xmlFile = xml;
        this.taskFile = task;
        this.Id = id;
        ConnectionManager.getInstance().push(this);
    }

    @Override
    public void run() {
        User.SendTask(con, xmlFile, taskFile, Id);

        ConnectionManager.getInstance().didComplete(this);
    }
5
задан Matthew Murdoch 14 September 2011 в 15:10
поделиться