【java高级】简说多线程(上)

一听到多线程编程,并发编程啥的,感觉挺高大上,可了解完之后,觉得挺简单,因为它形象呀~

小明一天用洗衣机洗衣服需要20分钟,托地板5分钟,擦桌子10分钟,晾衣服7分钟,请问小明做完这些事至少需要多长时间?怎么算?

不知读者对上述小学题是否有印象,这就涉及到了多线程。
在这里插入图片描述

概念解读

程序

一段静止的代码。编程,编程,就是编的这个“程序”吧。

进程

正在运行的一个程序

线程

一个进程内部的一条执行路径。每个java程序都有一个隐含的主线程:main方法。
在这里插入图片描述
多线程中,每次执行的顺序是不一样的,取决于谁先抢到CPU资源。这样就涉及到了调度策略:

  • 时间片:谁先来谁先执行
  • 抢占式:高优先级的线程抢占CPU。但是设置优先级只是说明抢占资源的概率变大了,并不能保证一定会抢到。

综述

如果网易云静止着,那它就是一个程序。运行起来,就是一个进程,比如我们在任务管理器中看到的那样
在这里插入图片描述
进程再细分,就是线程。比如我们听网易云的时候,一边听歌,还能一边找下一首想听的歌,这就是多线程。

单、多线程的区分

能用一条线穿起来的,是单线程。否则是多线程。
在这里插入图片描述
像这样,在半路撇开的,就是多线程:
在这里插入图片描述

创建多线程的两种方式

(1)继承java.lang.Thread类

具体实现就是上图。下图是升级版,即1个主线程,2个子线程。

(2)实现Runnable接口

(3)两者比较

实现的方式优于继承的方式,因为它避免了java单继承的局限性。而且如果多个线程要操作同一份数据(比如3个机器同时卖票),更适合用实现的方式。

多线程的使用

多线程的常用方法

在这里插入图片描述
其实我们在上面也已经涉及了挺多:

join()方法

在A线程中调用B线程的join方法,表示:当执行到此方法,A线程停止执行,直到B线程执行完毕后,A线程再接着join()之后的代码执行

运行结果

sleep()方法

sleep(long l):显式地让当前线程睡眠l毫秒
在这里插入图片描述

yield()方法

调用此方法的线程,释放当前cpu的执行权。接下来两者再次争抢。
在这里插入图片描述
运行过程:当主线程为整数时,释放资源。然后主线程和子线程两者再次争抢,谁抢到是谁的。
在这里插入图片描述
更多方法或者对方法的详细解释可以查看API文档:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡夫卡的熊kfk

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

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

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

打赏作者

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

抵扣说明:

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

余额充值