多线程睡眠排序法:使用4种创建线程的方式
package test;
import java.util.concurrent.*;
public class SleepSortTest {
public static void main(String[] args) {
int[] arr = new int[]{1, 3, 98, 44, 32};
}
public static void sleepSortThread (int[] arr) {
for (int i = 0; i < arr.length; i++) {
int num = arr[i];
new Thread() {
@Override
public void run() {
try {
sleep(num);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(num);
}
}.start();
}
}
public static void sleepSortRunnable (int[] arr) {
for (int num : arr) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(num);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(num);
}
}).start();
}
}
public static void sleepSortCallable (int[] arr) {
for (int num : arr) {
new Thread(new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
try {
Thread.sleep(num);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(num);
return null;
}
})).start();
}
}
public static void sleepSortThreadPool1 (int[] arr) {
ExecutorService service = Executors.newFixedThreadPool(arr.length);
for (int num : arr) {
service.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(num);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(num);
}
});
}
}
public static void sleepSortThreadPool2 (int[] arr) {
ExecutorService service = Executors.newFixedThreadPool(arr.length);
for (int num : arr) {
service.execute(() -> {
try {
Thread.sleep(num);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(num);
});
}
}
}