为什么需要多线程

发表时间:2017-09-01 17:08:20 浏览量( 181 ) 留言数( 0 )

学习目标:

1、了解线程的作用

2、了解线程的复杂性

3、建立多线程的思维模式


学习过程:

一、多线程的作用  

    编写正确的并发编程是有难度,非常出错,而且错误很难发现。但是并发编程又是必须的。为什么呢?因为线程如果使用的好,可以提高应用系统的性能。每一个独立的线程可以处理自己的事情,使得代码分工明确,代码也更容易的编写、阅读和维护。

    比如在Swing图形界面中就会大量的使用到多线程的技术,如:用户点击了搜索按钮,负责搜索的线程就会在后台进行搜索,但是前台用户还是可以进行其他的一些浏览操作,如果只有单线程的话,用户就只能呆呆的在那里等搜索结束了。

    目前服务器都是多核多线程的,为了更好的提升系统的利用率,使用的多线程技术就是最好的方式了。比如Web应用程序为了提高系统的性能,多线程技术是必不可少的的,特别是在操作I/O这些比较耗时的操作时,如果只有单线程,只能处理完I/O操作之后才能操作其他的事情,那么整个应用程序都会变得非常慢。


二、编写多线程的复杂性 

   但是多线程遇到的问题比单线程要复杂得多。使用多线程可能会遇到一下的一些问题:

1、线程的安全性问题。

    举一个多线程操作i++得实例:i++虽然看上去是一个操作,但是事实上是分为三个步骤得(读取数据,执行加一操作,把数据写回去。),并不是线程安全,最后导致出来得结果是不正确得,但是程序并没还有任何得异常信息出来,所以线程得安全性问题有一定得隐蔽性,有的时候需要反复多次的测试才能发现有问题。


2、活跃性问题

    包括死锁,饥饿、活锁等问题。线程有的时候需要等待某个对象得锁才能获取,但是这个锁也许一直都不会释放,再程序中就会出现死锁,因为涉及到多个线程得竞争问题,同时依赖当时得运行环境决定得,也许再开发和测试得过程和正式得环境有差异,问题肯能会再正式环境才会给发现,一般需要使用JVM得相关得命令查看有没有发送死锁等才能发现问题。


3、性能问题

    引入线程是为了提升性能,但是线程间得切换也是需要耗费CPU的,如果线程频繁的切换,性能就会大打折扣了。线程在共享数据时,一般需要同步,而同步操作也是需要耗费资源的,


    可见,线程有一定的挑战性,但是线程又是无处不在的,掌握多线程编程是必须,也是进入高级编程的必经阶段。