多线程的创建有七种方式:
(1)继承Thread类创建线程
(2)实现Runnable接口创建线程
(3)使用匿名内部类的形式创建线程
(4)使用lambda表达式创建线程
(5)使用Callable和Future创建线程
(6)使用线程池例如用Executor框架
(7)spring 的@Async异步注解
1.继承Thread类创建
public class ThreadDemo extends Thread{
//程序执行的代码就在run()方法中
@Override
public void run(){
System.out.println(Thread.currentThread().getName() + "我是子线程");
try{
//子线程阻塞3秒
Thread.sleep(3000);
}catch (Exception e){
}
}
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + "我是主线程");
//启动线程调用的是start()方法,而不是run()方法
//调用start()方法,线程不是立即被Cpu调度执行 而是等待cpu的调度 线程从就绪状态到执行状态
new ThreadDemo().start();
new ThreadDemo().start();
System.out.println("主线程执行完毕");
}
}
程序执行的代码就在run()方法中,启动线程调用的是start()方法,而不是run()方法。
2.实现Runnable接口创建线程
{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "我是子线程");
}
public static void main(String[] args) {
new Thread(new RunnableDemo()).start();
}
}
3.使用匿名内部类的形式创建线程
public class NeiBuLei{
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "我是子线程");
}
}).start();
}
}
4.使用lambda表达式创建线程
public class LambdaDemo {
public static void main(String[] args) {
new Thread(() -> System.out.println(Thread.currentThread().getName() + "我是子线程"),
"线程名").start();
}
}
5.使用Callable和Future创建线程
可以获取到返回结果
6.使用线程池例如用Executor框架
public class Pool {
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.execute(() -> System.out.println(Thread.currentThread().getName()
+ "我是子线程"));
}
}