线程创建的三种方式
- 1.继承Thread类
- 2.实现Runnable接口
- 3.匿名内部类/Lambda方式创建(常用)
- 1.
- 2.
- 3.
1.继承Thread类
2.实现Runnable接口
3.匿名内部类/Lambda方式创建(常用)
1.
public class MyThread {
public static void main(String[] args) {
Thread t=new MyThread();//创建MyThread线程对象
// 调用start()方法启动多线程
t.start();//调用start()方法启动线程(实际执行的还是run()方法)
//注意:子线程一定要放在主线程之前,不然先跑主线程还是会被当做是单线程
for (int i = 0; i < 6; i++) {
System.out.println("主线程执行:"+i);
}
}
}
//继承Thread类创建多线程,优点:代码简单。
// 缺点:线程类已经继承Thread类,无法继承其他类,不利于扩展
class MyThread extends Thread{
//继承Thread类,重写其中的方法即可实现多线程
//重写run()方法
public void run(){
for (int i = 0; i < 6; i++) {
System.out.println("子线程执行:"+i);
}
}
}
2.
class MyThread{
public static void main(String[] args) {
//创建一个任务对象
Runnable r=new MyRunnable();
//把任务对象交给Thread处理
Thread t=new Thread(r);
t.start();//调用start()方法启动线程(实际执行的还是run()方法)
//注意:子线程一定要放在主线程之前,不然先跑主线程还是会被当做是单线程
for (int i = 0; i < 5; i++) {
System.out.println("主线程执行:"+i);
}
}
}
//优点:只是实现接口,可以继续继承类和实现接口,扩展性强
// 缺点:多一层对象包装,如果线程有执行结果,是不可以直接返回的
class MyRunnable implements Runnable{
//实现Runnable接口,重写其中的方法即可实现多线程
public void run(){
for (int i = 0; i < 5; i++) {
System.out.println("子线程执行:"+i);
}
}
}
3.
class MyThread{
//实现Runnable接口,用匿名内部类的方式(另一种语法形式)
public static void main(String[] args) {
new Thread(()->{
for (int i = 0; i < 5; i++) {
System.out.println("子线程执行:"+i);
}
}).start();
for (int i = 0; i < 5; i++) {
System.out.println("主线程执行:"+i);
}
}
}
还没有评论,来说两句吧...