线程的实现方式一:继承Thread类
public class ThreadTest {
public static void main(String[] args) {
// 创建一个线程】
MyThread myThread = new MyThread();
myThread.run();//不会启动线程,不会分配新的分支栈(这种方式是单线程)
//启动线程
// start() 方法的作用是:启动一个分支线程,在JVM中开辟一个新的栈空间,这段代码执行结束以后瞬间就结束了
// 只要新的栈空间开辟出来,start() 方法就结束了,线程就启动成功了
// 启动成功的线程会自动调用run() 方法,并且run() 方法在分支栈的底部(压栈)
// run()方法在分支栈的底部,main()方法在主栈的底部,run和start方法是平级的
myThread.start();
// 这里的代码是运行在主线程中
for (int i = 0; i < 100; i++) {
System.out.println("主线程----->"+i);
}
}
}
class MyThread extends Thread{
@Override
public void run() {
// 这段程序运行在分支线程中---分支栈中
for (int i = 0; i < 100; i++) {
System.out.println("子线程------>"+ i);
}
}
}
线程的实现方式二:实现Runnable接口
public class ThreadTest02 {
public static void main(String[] args) {
// 创建一个可运行的对象
// MyThread02 r = new MyThread02();
// 将可运行的对象封装成一个线程对象
// Thread t = new Thread(r);
// 合并代码
Thread t = new Thread(new MyThread02());
t.start();
for (int i = 0; i < 100; i++) {
System.out.println("主线程----->"+ i);
}
}
}
//这并不是一个线程类,是一个可运行的类,他还不是一个线程
class MyThread02 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("子线程----->"+i);
}
}
}