课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了Java编程程序员需要掌握的一些编程知识以及多线程编程应用优势等内容,而本文我们就继续来了解一下,多线程编程安全问题都有哪些。
1.什么是多线程的安全问题?
当多个线程同时操作共享数据时,由于cpu执行每个线程的不确定性,可能导致一个线程对多条语句只执行了一部分,还没有执行完,另一个线程就参与进来执行,导致共享数据的错误,这就是多线程的安全问题。
2.有关安全问题的重要内容
1)同步
定义:同步是指在多个线程同时运行时,对多条操作共享数据的语句进行特定的处理,类似于上锁,保证同一时间段只有一个线程在执行共享数据的语句,只有该线程全部执行完后,其他线程才能进入执行。
前提:
a)必须是两个或两个以上的线程。原因:如果只有一个线程执行的话,是不会发生共享数据错误的。
b)必须是多个线程使用同一个锁。
利弊:
利处:可以解决多线程的安全问题(后面会具体讲到)。
弊端:由于需要对共享数据的代码进行特殊处理(需要不断去判断锁),较为消耗资源。
2)同步代码块
同步代码块是指对一对大括号{}里的代码进行同步,也就是多个线程运行时,始终保持该大括号{}的代码只有一个线程执行。
3.解决安全问题的办法
通过分析多线程出现的安全问题,不难发现,问题的原因就是因为一个线程执行共享数据的语句时,还没执行完,另一个线程就参与进来执行,这时就导致了共享数据发生错误。为了避免共享数据发生错误,可通过对需要执行共享语句的代码进行同步处理,让一段时间内只有一个线程执行该共享语句的代码,只有当一个线程执行完后,另一个线程才能参与进行执行。通过对操作共享数据的语句进行同步处理,就能很好解决多线程出现的安全问题。
4.死锁问题
当多个线程同时运行在同一个对象中时,存在两个或多个不同类型的同步,且这些同步形成互相嵌套,这样就导致两个线程在进入了自己的同步(锁)时,同时也在等待进入对方的同步中,从而发生死锁现象。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。