線程創建的方式有四種方法:
- 通過繼承Thread;
- 實現Runnable接口;
- 實現Callable接口,這種方式需要一箇中間類來協助現成的創建,
- 通過線程池的方式來進行線程的創建。
具體實現類:
package com.jxkj.juc;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.util.concurrent.*;
/**
* 功能描述:
*
* @author wcx
* @version 1.0
*/
public class CreateThread4Way {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//1. 繼承線程類
new ExtendsThread().start();
//2. 實現Runnable接口
new Thread(new ImplRunnable(), "A").start();
//3. 實現Callable接口
FutureTask futureTask = new FutureTask(new ImplCallable());
new Thread(futureTask, "B").start();
System.out.println(futureTask.get());
//4. 通過線程池創創建
MyThreadPool myThreadPool = new MyThreadPool();
myThreadPool.getThread();
}
}
class ExtendsThread extends Thread {
}
class ImplRunnable implements Runnable {
@Override
public void run() {
}
}
class ImplCallable implements Callable {
@Override
public Object call() throws Exception {
return "我是實現Callable的線程";
}
}
class MyThreadPool {
/**
* 定義靜態內部線程類
*/
public class MyTestThread implements Runnable {
@Override
public void run() {
System.out.println(System.currentTimeMillis() + "name:"
+ Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void getThread() {
MyTestThread myTestThread = new MyTestThread();
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("thread-pool-%d").build();
ExecutorService executorService = new ThreadPoolExecutor(5, 10,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingDeque<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
for (int i = 0; i < 15; i++) {
executorService.execute(myTestThread);
}
executorService.shutdown();
}
}
謝謝大家的閱讀!!