1 package org.zln.thread.poolqueue;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
6 import java.util.Comparator;
7 import java.util.UUID;
8 import java.util.concurrent.*;
9
10 /**
11 * 线程池中的线程的排序问题
12 * Created by sherry on 16/11/4.
13 */
14 public class StringThread {
15
16 /**
17 * 日志
18 */
19 private static Logger logger = LoggerFactory.getLogger(StringThread.class);
20
21 public static void main(String[] args) {
22 ExecutorService executorService = new StringExecutorPool(10).getExecutorService();
23 for (int i = 0; i < 100; i++) {
24 logger.debug(String.valueOf(i));
25 executorService.execute(new StringHandler(System.nanoTime()));
26 }
27 executorService.shutdown();
28 logger.debug("停止");
29 }
30
31
32 }
33
34 /**
35 * 任务类
36 */
37 class StringHandler implements Runnable {
38
39 public long time;
40
41 public StringHandler(long time) {
42 this.time = time;
43 }
44
45 @Override
46 public void run() {
47 System.out.println(Thread.currentThread().getName() + ":" + UUID.randomUUID().toString());
48 }
49 }
50
51 /**
52 * 线程池
53 */
54 class StringExecutorPool {
55 private int poolSize;
56 private BlockingQueue<Runnable> blockingQueue;
57 private ExecutorService executorService;
58
59 public StringExecutorPool(int poolSize) {
60 this.poolSize = poolSize;
61 blockingQueue = new PriorityBlockingQueue<>(100, new Comparator<Runnable>() {
62 @Override
63 public int compare(Runnable o1, Runnable o2) {
64 int res = o1.hashCode() - o2.hashCode();
65 if (res == 0){
66 StringHandler stringHandler1 = (StringHandler) o1;
67 StringHandler stringHandler2 = (StringHandler) o2;
68 res = (int) (stringHandler1.time - stringHandler2.time);
69 }
70 if (res >0 ){
71 System.out.println("往后排");
72 }else if (res < 0){
73 System.out.println("往前排");
74 }else{
75 System.out.println("排不出");
76 }
77 return res;
78 }
79
80 });
81
82 executorService = new ThreadPoolExecutor(poolSize, poolSize,
83 0L, TimeUnit.MILLISECONDS,
84 blockingQueue);
85 }
86
87 public ExecutorService getExecutorService() {
88 return executorService;
89 }
90 }