记一篇IT培训日记030-被问倒了

03月14日     晴    又太阳了

        今天讲多线程,大学自学时,对内存没有啥概念,进程,线程啥的有点像空中楼阁,一时折磨不透,便选择回避它,嘿嘿,问题只要我不去关注它,它就不存在。今天本来还想当回鸵鸟,好死不死,被小胖伤到自尊啦。

        小胖:叶子哥,问你几个问题,1>线程为什么要分那么多状态啊 2>线程创建使用extends Thread方法就行啦,为什么还提供了一个Runnable接口方式呢  3>为什么调用sleep方法,线程就停下来,时间到继续往下走,使用wait要等呢  4>多线程操作那么麻烦,注意这,注意那的,单线程操作不好么?

        我:牛逼,转性啦,这是问题都能问出来?

        小胖:九年义务教育早满足不了我啦,哥也补课啦好不好。

        我:牛逼,这次哥认怂,真不会。

        小胖:叶子哥,你别藏拙啦,知道你会的,跟大伙说说啊。

        说完,还叫来小瘦,老A,B哥跟小C恶意围观。大爷的,看着地下的三室二厅2卫,默默举起手,搬救兵啊。

        海燕老师:叶子啥问题啊

        我:小胖,提前学了多线程,结合今天讲的内容,想到几个很有深度的问题,想跟老师探讨一下,他还说你不一定能回答的出来。

        海燕老师:哦,小胖你说说看,看能不能回答。

        小胖满脸黑线,额头跑过一群神兽,无奈重复一遍上面的问题。

        海燕老师:可以啊,有想法,看不出你还有这一手,继续保持啊。

        问题1:线程分多状态跟2个因素有关,a:操作系统分时操作有关  b:程序方便控制有关。操作系统为提高cpu运行效率,使用时间片轮询执行方法,线程刚好在执行时间片上那么它就是运行时状态,如果不是那么就是等待状态。由这个决定线程2个状态,后续针对线程做更细致的控制,那么就需要更多的状态,比如开始,死亡,阻塞等。

        问题2:这是个好问题,其实看Thread的源码,你会发现Runnable实现方式本质还是Thread方法,最后都是要执行Thread的run方法,而run方法中又去调用runnable重写的run方法。这样设计符合设计模式里面说的接口隔离原则,使用Runnable接口分离出线程业务逻辑,起到程序解耦的作用。

        问题3:sleep方法会将当前线程休眠指定时间,此时的线程并不会释放资源(放弃cpu控制权),其他线程就必须等,sleep休眠时间到了之后,线程继续。wait方法不一样,它会让当前执行的线程释放资源,进入等待状态,后续需要专有的唤醒信号才会激活,某些特殊场景为了防止一直等情况,给wait加上过期时间,当时间一定,该线程自动醒来,进入就绪状态等待cpu的临幸。

        问题4:单线程操作好啊,但是现在电脑基本都是多核多线程,使用单线程跑程序有点大材小用,为了榨干cpu的性能,多线程操作是个好方式。但也不绝对,后面大家要学得redis就是使用单线程操作。

        众人:哦~

        我:懂了,哈哈,鸵鸟要抬头了~

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浪飞yes

我对钱没兴趣~

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

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

打赏作者

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

抵扣说明:

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

余额充值