目录
实现线程的前2种方式
Java 实现线程主要有 2 种方式 =======

目录
实现线程的前2种方式
Java 实现线程主要有 2 种方式 >>>>>>> 593e4ea (添加了SSM) 请注意:第二种方式更常用。因为 myRunnable 类实现接口后,还可以继承一次别的类,(联想 Java 不允许多继承),更灵活
# 继承 Thread 类+重写 run
第一种是:编写一个类,继承 java.lang.Thread,重写 run 方法
重写(Override)指的是子类重新定义了父类中已经存在的方法,具有相同的名称、参数列表和返回类型。重载(Overload)指的是在同一个类中定义多个方法,它们具有相同的名称但是参数列表不同(参数类型、参数个数或参数顺序)。一句话重写是针对继承关系中的方法,而重载则是针对同一个类中的多个方法。
public class ThreadTestTwo {
public static void main(String[] args) {
MyThread myThread = new MyThread();
//start方法的作用是,在JVM开辟一个新的栈空间,
//这段代码的任务完成以后,start()立刻就结束了。线程启动成功
//和run()方法的关系:
//线程启动后,自动调用run()方法,并且run方法在分支栈的底部(压栈)
//run方法和main方法时是平级的:main方法在主栈的栈底部,run方法在分支栈的栈底部
myThread.start();
for(int i=0;i<1000;i++){
System.out.println("主线程--->" + i);
}
}
}
class MyThread extends Thread {
@Override
public void run(){
for(int i=0;i<1000;i++){
System.out.println("分支线程--->" + i);
}
}
}
输出起来是交错打印。
对“交错”的描述:
主线程和分支线程打印顺序:有先有后;有多有少
至于"交错"的原因,请见线程生命周期
# 创建实现了 Runnable 接口的类+重写 run
样式
//定义一个可运行的类(并不一定是线程),实现Runnable接口
public class MyRunnable implements Runnable {
public void run() {
...
}
}
//在要用的时候,创建线程对象
Thread t = new Thread(new MyRunnable());
//启动线程
t.start();
例子
public class ThreadTest03 {
public static void main(String[] args) {
MyRunnable r = new MyRunnable();//new 一个可运行的对象
Thread t = new Thread(r);//把r封装成一个线程对象,Thread.java源码是 public Thread(Runnable target) { ... }
//以上2行代码可以合并成1行:
//Thread t = new Thread(new MyRunnable());
t.start();
for(int i=0;i<100;i++){
System.out.println("主线程--->" + i);
}
}
}
//MyRunnable实现的是Runnable类,只是一个可运行的类。还不是线程
class MyRunnable implements Runnable {
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("分支线程--->" + i);
}
}
}
← Java线程入门 第2种方式的匿名内部类→ <<<<<<< HEAD
- 跟随系统
- 浅色模式
- 深色模式
- 阅读模式