您所在位置: 网站首页 / 文档列表 / Java / 文档详情
java多线程同步块实例讲解素材.docx 立即下载
2024-04-29
约3.3千字
约5页
0
12KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

java多线程同步块实例讲解素材.docx

java多线程同步块实例讲解素材.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

java多线程同步块实例讲解素材java多线程同步块实例讲解素材Java同步块(synchronizedblock)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java同步关键字(synchronized)Java中的同步块用synchronized标记。同步块在Java中是同步在某个对象上。所有同步在一个对象上的同步块在同时只能被一个线程进入并执行操作。所有其他等待进入该同步块的线程将被阻塞,直到执行该同步块中的线程退出。有四种不同的同步块:实例方法静态方法实例方法中的同步块静态方法中的同步块上述同步块都同步在不同对象上。实际需要那种同步块视具体情况而定。实例方法同步下面是一个同步的实例方法:publicsynchronizedvoidadd(intvalue){this.count+=value;}静态方法同步静态方法同步和实例方法同步方法一样,也使用synchronized关键字。Java静态方法同步如下示例:publicstaticsynchronizedvoidadd(intvalue){count+=value;}同样,这里synchronized关键字告诉Java这个方法是同步的。静态方法的同步是指同步在该方法所在的类对象上。因为在Java虚拟机中一个类只能对应一个类对象,所以同时只允许一个线程执行同一个类中的静态同步方法。对于不同类中的静态同步方法,一个线程可以执行每个类中的静态同步方法而无需等待。不管类中的'那个静态同步方法被调用,一个类只能由一个线程同时执行。实例方法中的同步块有时你不需要同步整个方法,而是同步方法中的一部分。Java可以对方法的一部分进行同步。在非同步的Java方法中的同步块的例子如下所示:publicvoidadd(intvalue){synchronized(this){this.count+=value;}}示例使用Java同步块构造器来标记一块代码是同步的。该代码在执行时和同步方法一样。注意Java同步块构造器用括号将对象括起来。在上例中,使用了“this”,即为调用add方法的实例本身。在同步构造器中用括号括起来的对象叫做监视器对象。上述代码使用监视器对象同步,同步实例方法使用调用方法本身的实例作为监视器对象。一次只有一个线程能够在同步于同一个监视器对象的Java方法内执行。下面两个例子都同步他们所调用的实例对象上,因此他们在同步的执行效果上是等效的。publicclassMyClass{publicsynchronizedvoidlog1(Stringmsg1,Stringmsg2){log.writeln(msg1);log.writeln(msg2);}publicvoidlog2(Stringmsg1,Stringmsg2){synchronized(this){log.writeln(msg1);log.writeln(msg2);}}}在上例中,每次只有一个线程能够在两个同步块中任意一个方法内执行。如果第二个同步块不是同步在this实例对象上,那么两个方法可以被线程同时执行。静态方法中的同步块和上面类似,下面是两个静态方法同步的例子。这些方法同步在该方法所属的类对象上。publicclassMyClass{publicstaticsynchronizedvoidlog1(Stringmsg1,Stringmsg2){log.writeln(msg1);log.writeln(msg2);}publicstaticvoidlog2(Stringmsg1,Stringmsg2){synchronized(MyClass.class){log.writeln(msg1);log.writeln(msg2);}}}这两个方法不允许同时被线程访问。如果第二个同步块不是同步在MyClass.class这个对象上。那么这两个方法可以同时被线程访问。Java同步实例在下面例子中,启动了两个线程,都调用Counter类同一个实例的add方法。因为同步在该方法所属的实例上,所以同时只能有一个线程访问该方法。publicclassCounter{longcount=0;publicsynchronizedvoidadd(longvalue){this.count+=value;}}publicclassCounterThreadextendsThread{protectedCountercounter=null;publicCounterThread(Countercounter){this.counter=counter;}publicv
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

java多线程同步块实例讲解素材

文档大小:12KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用

手机号注册 用户名注册
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
登录
手机号登录 微信扫码登录
微信扫一扫登录 账号密码登录

首次登录需关注“豆柴文库”公众号

新用户注册
VIP会员(1亿+VIP文档免费下)
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用