多线程的概念
灵魂四问?
什么是进程呢?
答:进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个基本单位!
啥?这是人话吗?
其实这本身就是一个抽象的概念(就是对程序的以一种抽象),咱们就把它理解成程序的一次执行过程就可以了!
什么是线程呢?
一个进程可包含一个或多个线程,咱们就可以理解为它是程序执行过程的一部分就可以了!
什么是多线程呢?
就是多个线程并发执行!
如果一个子任务阻塞,程序可以将CPU调度另外一个子任务进行工作。这样CPU还在这个大任务中,而不是被调去执行其他大任务了。可以提高该大任务对CPU的利用率!
并发与并行的区别是啥呢?
并行:同时执行不同的任务。(多个大任务)
并发:交替执行不同的任务。(一个任务下的多个小任务)
进一步抽象:
并行:我边看动漫边洗衣服!(同一时刻)
并发:我看10s动漫,之后再去洗10s中衣服!(不同时刻,同一时间段!)
如何实现多线程
实现多线程的方法有多种,我这里就只介绍比较常用的两种!
方法一:继承Thread类
①编写一个类Thread1继承Thread类,实现run方法!
public class Thread1 extends Thread {
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName() + " is running!");
// 一定要加try ... catch... 捕获异常,不然会报错!
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
②实例化Thread1类,并调用start方法启动线程!(会自动以新进程调用run方法)
public class TheadDemo {
public static void main(String[] args) {
Thread1 t1 = new Thread1();
t1.start();
Thread1 t2 = new Thread1();
t2.start();
}
}
注意:
1、同一个进程多次执行start会报错;
2、多个线程启动,启动的先后顺序是随机的;
3、线程无需关闭,run方法执行结束后,自动关闭;
4、main()函数可能早于其他线程结束,整个程序并不中止。
其执行的结果如下图所示:
方法二:实现Runnable接口
①创建类Thread2实现Runnable接口,并实现run方法
public class Thread2 implements Runnable {
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName() + " is running!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Java本身只能单继承,implements 关键字可以变相的使Java具有多继承的特性
接口只有定义(相对来说),抽象类可以有定义和实现
②创建线程对象,将实现类对象传入,调用start方法。
public class TheadDemo {
public static void main(String[] args) {
Thread2 target1 = new Thread2();
Thread t1 = new Thread(target1);
t1.start();
Thread2 target2 = new Thread2();
Thread t2 = new Thread(target2);
t2.start();
}
}
其执行的结果如图所示:
以上,便是本期的全部内容,主要就是引入一下概念与大体的思路,我们下期再见!