线程与进程的区别 JAVA创建多线程的几种方法

鼠鼠我捏,甲流晕死啦

文章目录

目录

一、线程

二、线程和多线程

三、线程和进程的区别

四、JAVA如何实现多线程编程的几种方法

1.使用继承Thread重写run方法来创建线程

2.使用使用Runnable接口 重写run方法

3.继承Thread 使用匿名内部类

4.实现Runnable  使用匿名内部类

5.使用lambda表达式

总结


一、线程

上几节说到了进程,进程和线程实质上是包含关系的,线程其实就是轻量化的进程。

为什么这么说?

轻量化,顾名思义就是使用起来更快,占用更小,一个进程中的多个线程之间,公用一份系统资源

(内存资源,文件描述表)

只有在进程启动,创建第一个线程的时候,需要操作系统花费成本去分配资源,一旦进程(第一个线程)创建完毕,之后再次创建线程就不需要再次分配资源了!!这样就提高了整体的效率

二、线程和多线程

线程究竟是什么呢??多线程又是怎么回事?多进程不可以吗??

举个例子:

假设一个食堂只有一个窗口,食堂有饭100份,老铁们必须给这100份吃完!

此时可以这么看 我的食堂就是我的操作系统,我的窗口就是进程,我的尬笑老铁就是线程 饭就是这个进程的任务,(每个窗口之间都有块板子,你在哪里买的饭就只能在那个窗口的地方吃)

此时只有一位尬笑老铁,老铁一看你让我一个吃一百份饭???即便是能吃完我累也累死了吧??我一个人吃完了天都黑了把??  

此时就是这个进程当中只有一个线程(既不是多线程也不是多进程),效率相对较慢!!  

那有的老铁可能说,那我在搞一个窗口,在搞一个老铁,再多搞几个老铁,几个窗口,反正就一百份饭,我窗口越多,老铁越多不就吃的越快吗??

  

这么一看,我一个老铁只需要吃五十份就吃完了,事实上确实速度提高了不少,但是你也付出了一些代价,在操作系统中,进程是比较“重量的”,你每多创建一个窗口(进程),都需要耗费额外的资源分配,每次创建都要消耗资源,如果特别多的话,那这个开销就比较大了,(这就是多进程!!)再者,我两个窗口直接我互相看不到对方,我没法确定对面吃了多少(完成多少任务),没法相互配合!!(这就是进程的隔离性) 这么一看多进程好像并没有那么理想。

那有老铁又要说了,那我就找多几个老铁不就可以了,我多找人总比多开窗口付出的代价要小很多把??

我找了十个尬笑老铁来吃饭,这么一看,我一个人老铁就吃十份就吃完了,我找人又不用特别大的付出(基本白嫖的谁不来啊),我和我找来的老铁们还可以一起吃饭!!多完美!  (这就是多线程) 

但是此时又出来问题了,如果我老铁越多,是不是我速度就越快了??一百份,那我找一百个老铁,一千个,那不是更快了吗??

 NONONO 当然不是越多越好,大家想一想,当我真的只有一百份,却有一千个老铁,那我只有一百个老铁可以吃上,你搞的越多,我食堂都爆满了,还用不上这么多人,反而会更慢!!!

还有一个更严重的问题,可能这些老铁里就有比较暴躁的,“我吃不上,你们也别想吃!!”,直接给窗口给砸了!!!!,这导致所有老铁都吃不了了!!!哈哈哈哈哈哈

(因为公用一个系统资源,一旦有一个线程出错,就会导致整个进程崩了!!)

三、线程和进程的区别

通过上面的举例总结一下:

1.进程包含线程

2.进程有自己独立的内存空间和文件描述表,线程是公用一个内存空间和文件描述表

3.进程是操作系统进行系统资源分配的基本单位,线程是进行系统调度执行的基本单位

4.进程具有隔离性,相互不影响,同一进程的多个线程,一旦有一个出错,就会导致整个进程出错

四、JAVA如何实现多线程编程的几种方法

1.使用继承Thread重写run方法来创建线程

   这里简单提一嘴,多线程多线程,每一个线程都是一个独立的执行流,如果不是多线程,这里的where(true)就会直接循环打印我走了 ,但是我们是又创建了一个线程,所以这两个是同时打印的!!!


我们可以使用JDK自带的jconsole  来查看JAVA 进程中的线程(只能看JAVA 的)

2.使用使用Runnable接口 重写run方法

  3.继承Thread 使用匿名内部类 

 4.实现Runnable  使用匿名内部类

  5.使用lambda表达式

这种是最推荐,也是最简单,最直观的,前面的都可以不会,这个一定要会!!


总结

本篇介绍了线程和进程的主要区别!!尬笑老铁举例!!,最后简单讲了下怎么用JAVA来实现多线程编程,要学的还很多 ,一起加油老铁!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值