Java线程:线程的同步 - 编程入门网
Java线程:线程的同步时间:2010-12-08 BlogJava Werther一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对 象上的数据。
运行结果: 从结果发现,这样的输出值明显是不合理的。原因是两个线程不加控制的访 问Foo对象并修改其数据所致。 如果要保持结果的合理性,只需要达到一个目的,就是将对Foo的访问加以限 制,每次只能有一个线程在访问。这样就能保证Foo对象中数据的合理性了。 在具体的Java代码中需要完成一下两个操作: 把竞争访问的资源类Foo变量x标识为private; 同步哪些修改变量的代码,使用synchronized关键字同步方法或代码。 Java线程:线程的同步(2)时间:2010-12-08 BlogJava Werther二、同步和锁定 1、锁的原理 Java中每个对象都有一个内置锁 当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代 码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定 对象、在对象上锁定或在对象上同步。 当程序运行到synchronized同步方法或代码块时才该对象锁才起作用。 一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以 获得锁,直到第一个线程释放(或返回)锁。这也意味着任何其他线程都不能进 入该对象上的synchronized方法或代码块,直到该锁被释放。 释放锁是指持锁线程退出了synchronized同步方法或代码块。 关于锁和同步,有一下几个要点: 1)、只能同步方法,而不能同步变量和类; 2)、每个对象只有一个锁;当提到同步时,应该清楚在什么上同步?也就是 说,在哪个对象上同步? 3)、不必同步类中所有的方法,类可以同时拥有同步和非同步方法。 4)、如果两个线程要执行一个类中的synchronized方法,并且两个线程使用 相同的实例来调用方法,那么一次只能有一个线程能够执行方法,另一个需要等 待,直到锁被释放。也就是说:如果一个线程在对象上 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |