线程的同步问题
多线程编程中容易出现错误情况,这是由系统的线程调度具有一定随机性造成的,这些情况必须杜绝。
- 线程的执行顺序不可重现,但是执行结果一定可重现
- 解决方案就是同步处理
同步的处理方法
当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据被当前正在访问的线程加上互斥锁后,在同一个时刻,其他线程只能处于等待的状态,直到当前线程处理完毕释放该锁。
具体编程中使用synchronized关键字可以使用互斥锁。
synchronized将并行改为串行,当然会影响程序的执行效率,执行速度会受到影响。其次synchronized操作线程的堵塞,也就是由操作系统控制CPU的内核进行上下文的切换,这个切换本身也是耗时的。所以使用synchronized关键字会降低程序的运行效率。