參考資料:
https://www.cnblogs.com/songshu120/p/7966314.html
1)繼承Thread類
public class Thread01 {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("thread start!");
}
};
thread.start();
}
}
public class Test01 {
public static void main(String[] args) {
//創(chuàng)建線程對象
MyThread t = new MyThread();
//啟動(dòng)線程
t.start();
}
}
//線程類
class MyThread extends Thread{
//線程對象調(diào)到CPU資源后,運(yùn)行run方法
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
2)實(shí)現(xiàn)Runnable接口
public class Test01 {
public static void main(String[] args) {
//創(chuàng)建線程,并給任務(wù)
Thread t = new Thread(new Task());
//啟動(dòng)線程
t.start();
}
}
//任務(wù)類
class Task implements Runnable{
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
3)實(shí)現(xiàn)Callable接口,這種是有返回值的線程
public class Test01 {
public static void main(String[] args) throws Exception {
//將帶返回值的任務(wù)類裝載在FutureTask對象中
FutureTask<String> futureTask = new FutureTask<>(new Task());
Thread t = new Thread(futureTask);
t.start();
//獲取返回值
String str = futureTask.get();
System.out.println(str);
}
}
//帶返回值的任務(wù)類
class Task implements Callable<String>{
//類似于Runnable接口中的run方法,線程搶到資源就會(huì)執(zhí)行call方法
@Override
public String call() throws Exception {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
return "帶返回值的任務(wù)類";
}
}
4)通過線程池創(chuàng)建
創(chuàng)建線程池的幾種方式
https://www.cnblogs.com/jxxblogs/p/11655670.html
Java線程池的四種實(shí)現(xiàn)方法及實(shí)現(xiàn)原理及分析
https://blog.csdn.net/qq_40033365/article/details/79951507
5)線程池拒絕策略
http://www.itdecent.cn/p/f0506e098c5b

拒絕策略
http://www.itdecent.cn/p/a55da1c8bb93