2.实现的方式更适合来处理多个线程的共享数据
联系:public class Thread implements Runnable
相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中
代码实例
方式一:继承于Thread类
1.创建一个继承于Thread类的子类
2.重写Thread类的子类–>将此线程执行的操作声明在run()中
3.创建Thread类的子类的对象
4.通过此对象调用start()
package com.atguigu.java;
/**
- 例子:遍历100以内的所有偶数
*/
//1.创建一个继承于Thread类的子类
class MyThread extends Thread{
//2.重写Thread类的子类
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if (i % 2 == 0 ){
System.out.println(Thread.currentThread().getName() + “:” + i); //Thread.currentThread().getName()获取当前线程名
}
}
}
}
public class ThreadTest {
public static void main(String[] args) {
//3.创建Thread类的子类的对象
MyThread t1 = new MyThread();
//4.通过此对象调用start():①启动当前线程②调用当前线程的run()
t1.start();//多线程
//问题一:不能通过直接调用run()的方法启动线程
// t1.run();//这个时候不是多线程执行
//问题二:不可以让已经start()的线程去执行,会报IllegalThreadStateException
// t1.start();
//需要重新创建一个线程的对象
MyThread t2 = new MyThread();
t2.start();
for (int i = 0; i < 100; i++) {
if (i % 2 == 0 ){
System.out.println(Thread.currentThread().getName() + “:” + i +“**********”);
}
}
}
}
方式二:实现Runnable接口
1.创建一个实现了Runnable接口的类
2.实现类去实现Runnable中的抽象方法:run()
3.创建实现类的对象
4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
5.通过Thread类的对象调用start()
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!