不爱生姜不吃醋⭐️
如果本文有什么错误的话欢迎在评论区中指正
与其明天开始,不如现在行动!
文章目录
- 🌴前言
- 🌴一、什么是多线程?
- 1.进程
- 2.线程
- 3.多线程作用
- 🌴二、多线程中的两个概念
- 1. 并发
- 2. 并行
- 3.举例
- 🌴三.多线程的实现方式
- 1.继承Thread类
- 2.实现Runnable接口
- 3. 利用Callable接口和Future接口
- 4. 三种实现方式的对比
- 在这里插入图片描述
- 🌴总结
🌴前言
本文内容是关于多线程的知识,包括使用Java实现多线程的三种方式。
🌴一、什么是多线程?
1.进程
进程是程序的基本执行实体。
2.线程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程的实际运作单位。
例:电脑管家是一个进程,其中垃圾清理和病毒查杀就是线程。
若是应用软件中有多个互相独立,可以同时运行的功能,那么就叫做多线程。
3.多线程作用
可以让程序同时做多件事情,提高效率。
🌴二、多线程中的两个概念
1. 并发
在同一时刻,有多个指令在单个CPU上交替执行。
2. 并行
在同一时刻,有多个指令在多个CPU上同时执行。
3.举例
以2核4线程为例,如果同时打开了四个线程,那么此时状态为并发,如果打开了超过四个线程,那么此时会随机切换线程,并发和并行状态共存。
🌴三.多线程的实现方式
1.继承Thread类
- 自己定义一个类继承
Thread
- 重写
run()
方法 - 创建子类的对象,并启动线程
定义一个类
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("我是" + getName());
}
}
}
启动线程
public class ThreadDemo {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.setName("线程一");
t2.setName("线程二");
t1.start();
t2.start();
}
}
2.实现Runnable接口
- 自己定义一个类实现
Runnable
接口 - 重写
run()
方法 - 创建自己的类的对象
- 创建一个
Thread
类的对象,并开启线程
定义一个类
public class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("我是" + Thread.currentThread().getName());
}
}
}
启动线程
public class RunnableDemo {
public static void main(String[] args) {
MyRunnable mr = new MyRunnable();
Thread t1 = new Thread(mr);
Thread t2 = new Thread(mr);
t1.setName("线程一");
t2.setName("线程二");
t1.start();
t2.start();
}
}
3. 利用Callable接口和Future接口
- 自己定义一个类
MyCallable
实现Runnable
接口 - 重写
call()
方法(有返回值,表示多线程运行的结果) - 创建
MyCallable
的对象(表示多线程要执行的任务) - 创建
FutureTask
的对象(作用管理多线程运行的结果) - 创建一个
Thread
类的对象,并启动线程
定义一个类
public class MyCallable implements Callable<Integer> {
int sum = 0;
@Override
public Integer call() throws Exception {
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
启动线程
public class ThreadDemo2 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable mc = new MyCallable();
FutureTask<Integer> ft = new FutureTask<>(mc);
Thread t = new Thread(ft);
t.start();
System.out.println(ft.get());
}
}
4. 三种实现方式的对比
🌴总结
文章中代码的编写使用的都是Java线程的知识,多加练习熟能生巧。
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!