线程

大家好,我是IT修真院上海分院第5期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务10中的深度思考,线程?

一、背景介绍

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。

一个线程是程序中的一个执行线程。JVM允许一个应用在运行时有多个执行线程。

每个线程都有一个优先级。高优先级的线程先于低的执行。任何一个线程可能或不可能被标记为守护进程。当运行在同一个线程中的代码创建了一个新线程对象(Thread Object),那么这个新线程将它的优先级设置为与创建它的线程相同的优先级。当且仅当这个线程是守护进程时,新建的线程才是守护进程。也可以在代码里面这种setDeamon(true);。

当JVM启动时,通常只有一个非守护进程的线程,通常会调用某些类的main方法。

二.知识剖析

创建新Thread的两种方式。一个方式是声明一个Thread类的子类,这个子类需要重写Thread类的run方法。然后这个子类的实例可以被分配和启动。

另外一个方式是声明一个类去实现Runnable接口。然后实现run方法。之后这个子类的实例作为创建Thread的参数可以被分配和启动。

大多数情况,应该使用Runnable接口,因为应用只需要重写run()方法,而且如果不打算修改或增强类的基本行为不应该将类进行子类化。

每个线程有一个用于指定它目的的名称,多个线程可以同样的名字。如果没有指定名字,会自动生成。除非额外注明,否则传递一个null参数给构造器或者方法,会造成NullPointerException。

线程属性:线程优先级(不推荐使用),守护线程(为其他线程提供服务),处理未捕获异常的处理器(run方法不能抛出任何被检查,不被检测的异常会导致线程终止。在这种情况下,线程就死亡了。在这种情况下,我们需要实现一个Thread.UncaughtExceptionHandler。我们可以通过这种方式来知道,真正让我们的run意外死亡的问题在哪里。)。

线程状态(NEW, Runnable, Blocked, Waiting, Timed waiting, Terminated)。中断线程:自然终止或异常终止。

竞态条件:两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称为存在竞态条件。导致竞态条件发生的代码区称为临界区。临界区使用适当的同步就可以避免竞态条件。

允许被多个线程同时执行的代码称作线程安全的代码,线程安全的代码不包含竞态条件。

三、常见问题

1、调用 run()方法而非 start()方法?

2、中断线程?

3、线程不安全是什么?

四.解决方案

1、答:应该调用start()方法启动线程。直接调用run()方法不会创建一个新线程。

2、答:执行完run()方法最后一句正常退出;出现了没有捕获的异常,终止run()方法,异常退出。

3、答:线程不安全是指,多个线程对同一个资源进行读写操作时发生。如果只是读的话,不会产生线程不安全,但是如果存在写的线程时,对于资源更新前后,其他线程加载到的值不同。比如3个线程同时调用对数字4加一方法,正常结果是7。但是在线程不安全的情况下,三个线程可能读到的数字都是4,这样三个线程操作的结果就是5了。这就是线程不安全。解决办法是在加一方法的签名中加同步锁,就是synchronized关键字。这样在一个线程获得加一方法后,其他线程等待这个线程完成后,在调用加一方法。

五。编码实战


六、参考文献

https://www.cnblogs.com/android-blogs/p/5765148.html

https://blog.csdn.net/quinnnorris/article/details/55106626?utm_source=gold_browser_extension

https://blog.csdn.net/quinnnorris/article/details/55522555


8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

七.更多讨论

详见视频

腾讯视频

感谢大家观看

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

我的邀请码链接:http://www.jnshu.com/login/1/20535344

使用我的优惠码优惠多多!

我的邀请码:20535344

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值