第三章 线程的同步与死锁
程序员文章站
2022-05-22 11:20:21
...
在多线程处理当中,可以利用Runnable描述多个线程操作的资源,而Thread描述每一个线程对象,于是当多个线程访问同一资源的时候如果处理不当就会产生数据的错误操作。
线程同步
##所谓同步就是指多个操作系统在同一个时间段内只能有一个线程进行,其他线程要等待此线程完成之后才可以继续进行。
##解决同步问题的关键是锁,是指当某一个线程执行操作的时候,其他线程外面等待。
可以使用synchronized关键字实现这把所锁的功能,定义同步方法或同步代码块。在同步代码块的操作里面的代码只允许一个线程执行。
1、利用同步代码块进行处理:
synchronized(同步对象){
同步代码操作;
}
一般要进行同步对象处理的时候可以采用当前对象this进行同步。
加入同步处理之后,程序的整体性能下降了,同步实际上会造成性能的降低,异步才能达到性能的提升。
2、利用同步方法解决:只需在方法定义上使用synchronized关键字即可。
##两种方法有一样,在日后学习Java类库的时候会发现,系统中许多的类上使用的都是同步方法。
死锁
死锁是在多线程同步过程中有可能产生的一种问题,指的是若干个线程彼此互相等待的状态。死锁实际上是一种开发过程中出现的一种不确定状态, 有时候代码处理不当则会不定期出现死锁,这属于正常开放中的调试问题。
##若干个线程访问同一资源时一定要进行同步处理,而过多的同步会造成死锁(死锁是由同步引起的)
上一篇: 4.5 并发技术5:死锁问题