//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程
//总结:线程开启不一定立即执行,由CPU调度执行
public class TestThread1 extends Thread {
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在学习!!!"+i);
}
}
public static void main(String[] args) {
//main线程,主线程
//创建一个线程对象
TestThread1 testThread1 = new TestThread1();
//调用start()方法开启线程
//调用启动用start进入可执行态,然后执行的时候调用run方法
//如果testThread1.run();则程序先执行run()方法,然后再执行main()方法
//如果testThread1.start();则程序同时执行run()方法和main()方法
testThread1.start();
for (int i = 0; i < 20; i++) {
System.out.println("我在看狂神说Java!!!"+i);
}
}
}
==========================================================================
//创建线程方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
public class TestThread3 implements Runnable {
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在学习!!!"+i);
}
}
public static void main(String[] args) {
//创建runnable接口的实现类对象
TestThread3 testThread3 = new TestThread3();
//创建线程对象,通过线程对象来开启我们的线程,代理
// Thread thread = new Thread(testThread3);
// thread.start();
//上面两行代码等同与下面一行代码
new Thread(testThread3).start();
for (int i = 0; i < 20; i++) {
System.out.println("我在看狂神说Java!!!"+i);
}
}
}
总结:①继承Thread类,开始线程为testThread1.start();
②实现runnable接口,重写run方法,开始线程为new Thread(testThread3).start();
③继承Thread类为单继承,不建议使用,平常多使用实现runnable接口方式
还有一种创建线程的方式了解即可;第三种创建实现callable接口(我在下一篇博客里面介绍)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律