JAVA基础 day13 多线程

devtools/2024/10/16 0:14:01/

一、多线程

1.1多线程的创建方法?


1.1.1方式一:继承Thread类

java">//创建线程的方式之一:继承Thread类
public class demo1 {//main方法本身是由一条主线程推进,这里创建了myThread后,已经是多线程了public static void main(String[] args) {//3.创建一个线程对象,他才是真正代表一个线程MyThread myThread = new MyThread();//4.调用start方法,启动该线程myThread.start();for (int i = 0; i < 3; i++) {System.out.println(Thread.currentThread().getName() + ":" + "主线程"+i);}}
}
//1.定义一个子类来继承thread类,就可以成为一个线程
class MyThread extends Thread{//2.重写继承自thread的run方法,run方法是你要使用该线程完成的功能@Overridepublic void run() {for (int i = 0; i < 3; i++) {System.out.println(Thread.currentThread().getName() + ":" + "子线程" + i);System.out.println("\n");}}}

注意事项

主线程若放在启动子线程之前, 是会先跑完主线程任务,再启动子线程,相当于没有实现多线程。

1.1.2 方式二:实现Runnable接口

java">//创建线程的第二种方法
public class BuildMethod_2 {public static void main(String[] args) {//3.创建线程任务类对象,代表线程任务myThread_Build r = new myThread_Build();//4.把线程任务对象,交给一个线程对象处理Thread t = new Thread(r);//5.启动线程t.start();for(int i = 0; i < 10; i++){System.out.println("主线程" + i);}}
}
//1.定义一个类,来实现runnable接口
class myThread_Build implements Runnable {//2.重写run方法,创建线程任务@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println("子线程" + i);}}
}

匿名内部类写法:

java">//使用runnable接口的匿名内部类 + lambda 来简化线程创建
public class Runable_lmbda {public static void main(String[] args) {new Thread(()-> {for (int i = 0; i < 10; i++) {System.out.println("子线程" + ":" + i)}}).start();}
}

1.1.3 方式三:实现Callable接口

前两种方式都有一个问题:重写后的run方法,无法返回直接返回结果

由此引出第三种方式:实现callable接口+FutureTask类,可以返回线程执行完后的结果

java">//实现callable + futureTask类创建线程
public class Method3_Callable {public static void main(String[] args) {//3.创建一个实现类对象,来代表线程任务Callable my_call = new MyCallable(200);//4.把callable的任务对象,包装成FutureTask对象FutureTask<String> my_future = new FutureTask<String>(my_call);/*未来任务对象的作用:a.本质是一个runnable线程任务对象,可以交给thread线程任务对象处理b.可以获取线程运行后的结果*///5.把FutureTask对象作为参数,传给thread线程对象Thread my_thread = new Thread(my_future);//6.使用线程的start方法,启动线程my_thread.start();//3.创建一个实现类对象,来代表线程任务Callable my_call2 = new MyCallable(100);//4.把callable的任务对象,包装成FutureTask对象FutureTask<String> my_future2 = new FutureTask<String>(my_call2);Thread my_thread2 = new Thread(my_future2);my_thread2.start();//获取线程运行后的结果:使用FutureTask的get方法try {//如果主运行到这里,发现子线程任务还没跑完,他会让出cpu,等着子线程执行完System.out.println(my_future.get());} catch (Exception e) {e.printStackTrace();}try {System.out.println(my_future2.get());} catch (Exception e) {e.printStackTrace();}}
}
//1.定义一个实现类,实现callable接口 这是一个泛型接口,实现的时候要声明返回值类型
class MyCallable  implements Callable<String> {private final int num;public MyCallable(int num) {this.num = num;}public String call() throws Exception {int sum = 0;for (int i = 1; i <= num; i++) {sum += i;}return "子线程计算1到"+ "num" + "的结果是" + sum;}
}

1.2 多线程的常用方法

2.线程安全


http://www.ppmy.cn/devtools/126434.html

相关文章

使用js和canvas实现简单的网页贪吃蛇小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的↑↓←→控制移动&#xff0c;吃到食物增加长度&#xff0c;碰到墙壁或碰到自身就游戏结束 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#xff0c;复制即用 <!DOCTYPE html> <html lang"en"…

el-date-picker绑定数据显示比数据库少一天问题解决记录

问题描述&#xff1a;开发过程中发现数据库存的字段值要比<el-date-picker>绑定的值大一天&#xff0c;说明&#xff1a;数据库为mysql&#xff0c;字段类型为date类型 经过查阅资料&#xff0c;得知问题是因为时区不同步导致的。数据库存储的是UTC时间&#xff0c;而el…

【鱼类识别】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面+TensorFlow

一、介绍 鱼类识别系统。使用Python作为主要编程语言开发&#xff0c;通过收集常见的30种鱼类&#xff08;‘墨鱼’, ‘多宝鱼’, ‘带鱼’, ‘石斑鱼’, ‘秋刀鱼’, ‘章鱼’, ‘红鱼’, ‘罗非鱼’, ‘胖头鱼’, ‘草鱼’, ‘银鱼’, ‘青鱼’, ‘马头鱼’, ‘鱿鱼’, ‘鲇…

一篇文章带你快速了解linux中关于信号的核心内容

1. 信号概念 信号是操作系统用来通知进程某个特定事件已经发生的一种方式。它们是一种软件中断&#xff0c;可以被发送到进程以对其进行异步通知。 2. 信号处理的三种方式 执行默认动作执行自定义动作忽略 signal() 函数&#xff1a;将信号处理设置为 SIG_IGN&#xff0c;可…

MySQL 数据库备份与恢复的全面指南

目录 MySQL 数据库备份与恢复的全面指南1. 引言2. MySQL 数据库基础3. 备份策略4. MySQL 备份工具5. 使用 mysqldump 进行备份6. 使用 MySQL Enterprise Backup7. 使用 Percona XtraBackup 进行备份8. 数据库恢复过程9. 数据完整性验证10. 备份与恢复最佳实践11. 结论 详细内容…

Java入门:11.抽象类,接口,instanceof,类关系,克隆

1 JDK中的包 JDK JRE 开发工具集&#xff08;javac.exe&#xff09; JRE JVM java类库 JVM java 虚拟机 jdk中自带了许多的包&#xff08;类&#xff09; &#xff0c; 常用的有 java.lang 该包中的类&#xff0c;不需要引用&#xff0c;可以直接使用。 例如&#xff1…

【AAOS】Android Automotive 14模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r20 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch sdk_car_x86_64-trunk_staging-eng make -j8 运行效果 emualtor Home All apps …

盒子模型:文档流

1、文档流的概念 HTML网页默认的元素摆放机制 &#xff08;1&#xff09;块元素的文档流&#xff08;自上而下流水线摆放&#xff09; 代码如下&#xff1a; <head><style>div{width: 100px;height: 100px;background-color: gray;border: 2px solid red;}<…