public PriorityFutureTask<Void> submit(PriorityRunnable task) {
        if (task == null) {
            throw new NullPointerException();
        }
        final PriorityFutureTask<Void> ftask = new PriorityFutureTask(task, null);
        execute(ftask);
        return ftask;
    }
@Test
    public void testDefault() throws InterruptedException, ExecutionException {
        PriorityBlockingQueue<Runnable> workQueue = new PriorityBlockingQueue<Runnable>(1000);
        PriorityThreadPoolExecutor pool = new PriorityThreadPoolExecutor(1, 1, 1, TimeUnit.MINUTES, workQueue);

        Future[] futures = new Future[20];
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < futures.length; i++) {
            int index = i;
            futures[i] = pool.submit(new PriorityRunnable(0) {

                @Override
                public void run() {
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    buffer.append(index + ", ");
                }
            });
        }
        for (int i = 0; i < futures.length; i++) {
            futures[i].get();
        }
        assertEquals("0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ", buffer.toString());
    }