目录
一.进程
进程的概念:
一个程序运行起来,就会对应一个进程,进程也是系统分配资源的基本单位。尤其是对于Java来说,IDEA本身就是一个进程。当点击IDEA中的运行按钮,IDEA就会创建出一个新的进程来,运行所写的Java代码。
关于进程的其他相关知识可以观看我的上一篇博客:JavaEE初阶--进程调度的基本过程-CSDN博客
二.线程
线程的概念:
线程,可以理解成“进程的一部分”,一个进程中可以包含一个线程,或者多个线程。如果没有线程,只有进程的话,如果一个服务器,频繁的有客户进行访问,纳闷服务器需亚奥频繁的创建和销毁进程,非常浪费资源。引入线程之后,我们可以说进程中的一个PCB就是一个线程。
举个简单的例子:假设有100个任务,如果没有线程只有进程的话,那么该进程就需要完成这100个任务,但如果有10个线程,那每个线程分配到的任务就只有10个,大大节约了资源。当然,我们并不能无限引入线程,因为这个时候,线程调度开销就会非常明显,程序的性能可能不升反降。还有一种可能是不同的线程去争夺同一个任务,这会导致线程安全问题,也就是我们所说的BUG。
三.进程与线程的区别
定义:进程是程序的一次执行过程,而线程是进程中的一个执行单元,是程序执行的最小单位。
资源分配:进程是操作系统分配资源的基本单位,包括内存空间等资源;而线程则共享同一进程中的资源,包括内存空间等。
独立性:进程拥有独立的内存空间,一个进程的崩溃不会影响其他进程,而线程共享相同的内存空间,一个线程的崩溃可能会导致整个进程的崩溃。
四.进程与线程的联系
1.进程可以包含多个线程,一个进程至少包含一个主线程。
2.线程共享进程的资源,可以提高多任务处理的效率。
3.进程和线程都可以进行并发操作,同时处理多个任务。
五.线程的实现
在IDEA中,常见5种线程的实现
1.继承Thread
class MyThread extends Thread{
public void run(){
}
}
public class Demo1rev {
public static void main(String[] args) {
Thread t=new MyThread();
t.start();
}
}
2.实现Runnable
class MyRunnable implements Runnable{
public void run(){
}
}
public class Demo2Rev {
public static void main(String[] args) {
Thread t=new Thread(new MyRunnable());
t.start();
}
}
3.匿名内部类
public class Demo3Rev {
public static void main(String[] args) {
new Thread(){
public void run(){
}
}.start();
}
}
4.匿名内部类(针对Runnable)
public class Demo4 {
public static void main(String[] args) {
Thread t=new Thread(new Runnable() {
public void run() {
}
});
t.start();
}
}
5.lambda表达式
public class Demo5 {
public static void main(String[] args) {
Thread t=new Thread(() ->{
});
t.start();
}
}
以上就是5种线程的实现,其实在平常学习中,使用最多的就是lambda表达式这种,但5种方法都要学会。
六.总结
本篇文章介绍了线程与进程的区别以及联系,并介绍了5种多线程的实现方法。欢迎各位在评论区进行讨论,文章有什么不足也可以指出,谢谢大家观看!