java中的synchronized
2016-06-11 11:44
260 查看
概念回顾:
在操作系统中我们就学习过计算机工作的原理,其中最经典的就是我们电脑的CPU是如何“在同一时间完成多个任务的?”。
大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。
那么线程又是什么呢?
书中介绍开始是只有进程的概念,进程就是拥有资源和能够独立运行的最小单位,也就是程序的最小运行单位。在时间片轮转的调度方式中进程也是最小的调度单位。但是计算机发展后对CPU的要求提高,由于进程的切换消耗较大,为了进一步提高效率和满足复杂程序的要求对进程进一步分割,出现了线程的概念。一个进程可以包括多个线程。
比较:
1、线程是程序的最小执行单位,进程是操作系统分配资源的最小单位
2、进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号)
由于各线程之间可以共享程序的内存空间,所以会导致出现“与时间有关的错误”,导致最终的执行结果不正确,而解决的办法是使用锁,保证同一时间只有一个线程在执行代码段,在java中是使用synchronized关键字进行控制。
用法说明:
1. 修饰一段代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3. 修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修饰一个类,其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象。
未完。。。
在操作系统中我们就学习过计算机工作的原理,其中最经典的就是我们电脑的CPU是如何“在同一时间完成多个任务的?”。
大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。
那么线程又是什么呢?
书中介绍开始是只有进程的概念,进程就是拥有资源和能够独立运行的最小单位,也就是程序的最小运行单位。在时间片轮转的调度方式中进程也是最小的调度单位。但是计算机发展后对CPU的要求提高,由于进程的切换消耗较大,为了进一步提高效率和满足复杂程序的要求对进程进一步分割,出现了线程的概念。一个进程可以包括多个线程。
比较:
1、线程是程序的最小执行单位,进程是操作系统分配资源的最小单位
2、进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号)
由于各线程之间可以共享程序的内存空间,所以会导致出现“与时间有关的错误”,导致最终的执行结果不正确,而解决的办法是使用锁,保证同一时间只有一个线程在执行代码段,在java中是使用synchronized关键字进行控制。
用法说明:
1. 修饰一段代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3. 修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修饰一个类,其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象。
未完。。。
相关文章推荐
- C#线程间不能调用剪切板的解决方法
- C#实现进程管理的启动和停止实例
- DOS中判断进程是否存在的方法
- C#进程监控方法实例分析
- 批处理 结束麦咖啡进程的代码
- PowerShell查看进程的所属用户
- C#实现强制关闭当前程序进程
- C#实现读取被进程占用的文件实现方法
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- 简单掌握Windows中C#启动外部程序进程的方法
- C#线程队列用法实例分析
- 简要对比C语言中三个用于退出进程的函数
- C++使用CriticalSection实现线程同步实例
- VC实现获取当前正在运行的进程
- 基于C++实现的线程休眠代码