参考资料:
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) {
//创建线程对象
MyThread t = new MyThread();
//启动线程
t.start();
}
}
//线程类
class MyThread extends Thread{
//线程对象调到CPU资源后,运行run方法
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
2)实现Runnable接口
public class Test01 {
public static void main(String[] args) {
//创建线程,并给任务
Thread t = new Thread(new Task());
//启动线程
t.start();
}
}
//任务类
class Task implements Runnable{
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
3)实现Callable接口,这种是有返回值的线程
public class Test01 {
public static void main(String[] args) throws Exception {
//将带返回值的任务类装载在FutureTask对象中
FutureTask<String> futureTask = new FutureTask<>(new Task());
Thread t = new Thread(futureTask);
t.start();
//获取返回值
String str = futureTask.get();
System.out.println(str);
}
}
//带返回值的任务类
class Task implements Callable<String>{
//类似于Runnable接口中的run方法,线程抢到资源就会执行call方法
@Override
public String call() throws Exception {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
return "带返回值的任务类";
}
}
4)通过线程池创建
创建线程池的几种方式
https://www.cnblogs.com/jxxblogs/p/11655670.html
Java线程池的四种实现方法及实现原理及分析
https://blog.csdn.net/qq_40033365/article/details/79951507
5)线程池拒绝策略
https://www.jianshu.com/p/f0506e098c5b

拒绝策略
https://www.jianshu.com/p/a55da1c8bb93