转自: http://www.cnblogs.com/liutoutou/p/3328593.html
1、同步代码块
synchronized(obj){...} 括号里的obj就是同步监视器
线程开始执行同步代码块前,必须先获得对同步监视器的锁定,执行结束后自动释放对同步监视器的锁定
2、同步方法
使用synchronized修饰的方法,无须显示指定同步监视器,同步方法的同步监视器是this
1)不要对线程安全类的所有方法都进行同步,只对那些会改变竞争资源的方法进行同步
2)单线程环境中使用线程不安全版本保证性能,多线程环境中使用线程安全版本
3、释放同步监视器的锁定
当线程进入同步代码块、同步方法后:
下面几种情况会释放同步监视器的锁定:
1)执行结束
2)遇到break、return终止了该代码块、该方法的执行
3)出现了Error或Exception导致异常结束
4)程序执行了同步监视器对象的wait()方法,当前线程暂停
下面情况不会释放:
1)调用sleep()、yield()方法来暂停当前线程的执行
2)其他线程调用了该线程的suspend方法挂起
4、同步锁(Lock)
Lock是控制多个线程对共享资源进行访问的工具,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。
ReadWriteLock(读写锁):允许对共享资源并发访问
ReentrantLock(可重入锁):可以显示加锁、释放锁
5、死锁
分享到:
相关推荐
线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。 举例1: 银行存款 5000。柜台,折:取3000;提款机,卡:取 3000。剩余:2000 举例2...
C#线程同步的几种方法 C#线程同步的几种方法
.NET多线程同步方法详解(一):自由锁(InterLocked) 本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入主题,在多线程开发的应用中,线程同步是不可避免的。在.Net框架中,...
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
MFC 多线程及线程同步 MFC 多线程及线程同步 MFC 多线程及线程同步
简单学习用例,利用线程锁对线程同步进行控制,保证对公共资源的访问不出现错误!
java线程同步java线程同步java线程同步
本文件为操作系统中的线程同步实验的实验报告,有详细的代码和解释。
线程同步的四种方法的代码。事件 互斥量 信号量 临界区
多线程中的同步问题的几种解决方案,新手可以看看。主要通过临界区线程同步,互斥内核对象、事件内核对象,信号量内核对象来实现线程同步问题。
介绍了linux线程同步的所有方式,包括互斥、自旋、信号量、条件变量等技术
操作系统实验 多线程同步与互斥 java编写 可动态创建
通过模拟公交车运行时,司机,售票员以及乘客之间的同步状态来实现线程同步
C#_线程同步lock,Monitor,Mutex,同步 互斥 监控 锁
很不错的Delphi多线程和线程同步的例子,完整源码 原来的一个不知道CSDN怎么把文件搞丢了!新传一个资源,包含一个线程排序的例子!代码均搜集自网上!
简单实现多线程同步示例(模拟购票系统),内容为实现多线程同步过程,模拟购票系统进行同步购买情况;该处并未考虑线程守护问题,后期将对线程锁等安全问题进行初步研究!
C#线程同步,多个线程去执行,检测到最后一个线程执行完成,主线程继续执行其他业务AutoResetEvent
本工程中包含了线程同步的五种方法,现在拿出来和大家一起分享,VC6.0编译测试通过,工程中包含了5个小工程,具体讲述每种线程同步方法的具体使用列子,而且有详细的注释。
线程同步技术剖析!! 自己看了还不错!需要的下吧
多线程同步解决卖票问题