🌈个人主页:SKY-30
⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解
⚡学好数据结构,刷题刻不容缓:点击一起刷题
🌙心灵鸡汤:总有人要赢,为什么不能是我呢
🌈🌈🌈Java的多线程
⚡⚡⚡多线程的背景
为了充分利用cpu的多核心特性,我们引进了一种新的编程形式,并发编程,当然进程也可以进行并发编程,但是进程太"重"了,我们每次创建一个进程需要耗费很大的资源,对于有些业务场景可能需要对进程频繁的创建和删除,所以我们又引进了一个更轻量的进程-线程.
⚡⚡⚡多线程和多进程的联系
线程包含在进程之中,一个进程中至少包含一个或多个线程,对于线程来说它比进程创建和销毁的成本更小,并且一个进程中的多个线程是公用一份系统资源的(硬盘,网络带宽,内存…).
进程是操作系统资源分配的基本单位
线程是操作系统调度执行的基本单位
🌈🌈🌈在Java中使用多线程
==在Java中我们使用Java标准库中的Thread对象实现多线程.==对于实现Java的多线程我们这里有多种方式,这里给大家全部列举出来.
🌈🌈🌈创建线程
⚡⚡⚡⚡实现Thread类
我们可以实现一个继承了Thread类的类,然后重写run方法,在run方法中完成多线程的代码逻辑.然后再main方法中实例化对象,启动线程.
// 定义一个Thread类,相当于一个线程的模板
class MyThread01 extends Thread {
// 重写run方法// run方法描述的是线程要执行的具体任务
@Overridepublic void run() {
System.out.println("hello, thread.");
}
}
/**
* 继承Thread类并重写run方法创建一个线程
*
*
*/
public class Thread_demo01 {
public static void main(String[] args) {
// 实例化一个线程对象
MyThread01 t = new MyThread01();
// 真正的去申请系统线程,参与CPU调度
t.start();
}
}
⚡⚡⚡实现Runnable接口
这里我们也可以通过实现Runnable接口,然后实现run方法,实现多线程.然后将Runnable以参数的形式传递给Thread类,完成线程的创建.
// 创建一个Runnable的实现类,并实现run方法
// Runnable主要描述的是线程的任务
class MyRunnable01 implements Runnable {
@Overridepublic void run() {
System.out.println("hello, thread.");
}
}
/**
* 通过继承Runnable接口并实现run方法
*
*
*/
public class Thread_demo02 {
public static void main(String[] args) {
// 实例化Runnable对象
MyRunnable01 runnable01 = new MyRunnable01();
// 实例化线程对象并绑定任务
Thread t = new Thread(runnable01);
// 真正的去申请系统线程参与CPU调度
t.start();
}
}
⚡⚡⚡使用匿名内部类实现线程
由于我们上面的几种创建方式,都是利用继承和接口的形式,通过匿名内部类的学习,我们很容易想到我们完全可以利用匿名内部类实现一个线程,大大简化了代码的复杂性,是一种比较流行的形式.
/**
* 通过Thread匿名内部类的方法创建一个线程
*
*
*/
public class Thread_demo03 {
public static void main(String[] args) {
Thread t = new Thread(){
// 指定线程任务
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
};
// 真正的申请系统线程参与CPU调度
t.start();
}
}
⚡⚡⚡通过Runnable匿名内部类创建一个线程
**
* 通过Runnable匿名内部类创建一个线程
*
*
*/
public class Thread_demo04 {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
// 指定线程的任务