编写正确的程序很难,编写正确的多线程程序更难。如果对多线程理解的不够深入,编写出来的程序往往跟自己的预期不一样,甚至不知道问题出现在哪里。因此,如果想成为一个好的程序员,掌握多线程是必修的一门功课。


多线程带来的好处:


1、发挥处理器的强大处理能力

随着科技的进步,现在的CPU已经由单核变为双核,甚至多核。而多线程能够很好的利用CPU多核的处理能力来高效并发的执行程序。


2、建模的简单性

一个很复杂的任务可以分解为很多子任务在不同的子线程中去执行,经过这样的分解使得程序更加简洁,错误更少,也更容易测试和定位问题。


3、异步处理

单线程的致命缺点就是顺序执行,只有上一个步骤执行完才能开始下一个步骤,如果上一个步骤很耗时的话,则必须等待,显然这种体验是很不好的。最典型的例子就是GUI程序,比如按下一个按钮,如果执行的是一个比较耗时的操作,这个时候就必须使用线程,否则整个界面就会被冻结。



java多线程是一把双刃剑,用的好可以提升程序的执行效率,用的不好会带来各种莫名其妙的问题,所以在使用的时候我们必须对这些问题有一个清晰的了解。


多线程带来的风险:


1、安全性


我们知道多线程执行的顺序是不确定的,如果它们共享了一个可变变量,同时有线程会去修改这个共享变量的值,那么就会出现安全性问题。看下面这个计数器程序:


publicclass Counter {


   private int value;


   public int getNext(){

       return value++;

    }


}


本来这个程序设计的目的是:每次计算器都递增,不允许出现相同的值。但是如果有多个线程同时执行的话,这个就不确定了。假设当前value的值为10,有两个线程同时获取到这个值,然后各自递增一次,但是最后的结果却是11。这个就是典型的安全性问题,解决这个问题的办法就是使用同步,这个后面会介绍。


2、死锁


当在多线程中使用锁时,要特别注意死锁问题,因为一旦发生死锁,程序将运行不下去了。


3、性能


设计良好的并发程序能够提升性能,如果设计的不合理,滥用线程的话,性能不仅不能提升,反而会下降,这个也是必须要注意的。



现在java多线程已经无处不在了,如 java api 本身,各种框架,可以毫不夸张的说,几乎每个软件都会用到多线程,可见多线程是多么的重要啊。


后面的章节将会逐一的介绍java中多线程的相关知识,大家尽请期待!