多线程的概述

  • 什么是进程?什么是线程?
    • 进程是一个应用程序(一个进程是一个软件)。
    • 线程是一个进程中的执行场景/执行单元。
    • 一个进行可以启动多个线程。

  • 对于java程序来说,当在DOS命令窗口中输入:java HelloWord 回车之后
    • 会先启动JVM,而JVM就是一个进程。
    • 同时再启动一个垃圾回收线程负责看护,回收垃圾。
    • 最起码,现在的java程序中至少有两个线程并发,
    • 一个是垃圾回收线程,一个是执行main方法的主线程。

  • 进程和线程是什么关系?
    • 阿里巴巴:进程
      • 马云:阿里巴巴的一个线程
      • 童文红:阿里巴巴的一个线程
    • 京东:进程
      • 刘强东:京东的一个线程
      • 奶茶妹妹:京东的一个线程
    • 线程可以看作是现实生活当中的公司。
    • 线程可以看作是公司当中的某个员工。

火车站,可以看作是一个进程。

火车站中的每一个售票窗口可以看作是一个线程。

我在窗口1购票,你可以在窗口2购票,你不需要等我,我也不需要等你。

所以多线程并发可以提高效率。

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。

你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。

你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

并发的关键是你有处理多个任务的能力,不一定要同时。

并行的关键是你有同时处理多个任务的能力。

所以我认为它们最关键的点就是:是否是『同时』。

java中之所以有多线程机制,目的就是为了提高程序的处理效率。

并发:同一时刻,多个任务交替执行,造成一种貌似同时的错觉,简单的说单核cpu实现的多任务就是并发。

并行:同一时刻,多个任务同时执行,多核cpu可以实现并行。

思考一个问题:

使用了多线程机制之后,main方法结束,是不是有可能程序也不会结束。

main方法结束只是主线程结束了,主栈空了,其他的栈(线程)可以还在弹栈压栈。

  • 什么是真正的多线程并发?
    • T1线程执行T1的。
    • T2线程执行T2的。
    • T1不会影响T2,T2也不会影响T1,这叫做真正的多线程并发。

电影院采用胶卷播放电影,一个胶卷一个胶卷播放速度达到一定程度之后,人类的眼睛产生了错觉,感觉是动画的。

这说明人类的反应速度很慢,就像一根钢针扎到手上,到最终感觉到疼痛,这个过程对于计算机来说是很长的,在这个期间计算机可以进行亿万次的循环。所以计算机的执行速度很快。

  • java语言中,实现多线程有两种方式:
  • 注意:第二种方式实现接口比较常用,因为一个类实现了接口,它还可以去继承其他的类,更灵活。

Run()方法:

不会启动线程,不会分配新的分支栈,只是单纯的调用方法。

Start()方法:

启动一个分支线程,在JVM中开辟一个新的栈空间,这段代码任务完成之后,瞬间就结束了。

使用这个方法是为了开启一个新的栈空间,只要新的栈空间开出来,start()方法就结束了。

线程就启动成功了。run方法在分支栈的底部,main方法在主栈的栈底部。run和main是平级的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小红花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值