线程同步——使用(synchronized)关键字

本文探讨了Java中线程同步的必要性,由于多线程并发访问共享数据可能导致数据不准确,因此需要同步。线程同步可通过synchronized关键字实现,它可以修饰方法或代码块,确保同一时间只有一个线程访问被锁定的资源。同步方法分为实例方法和静态方法,静态方法的同步是全局的,而实例方法的同步作用于特定对象。判断线程是否同步主要看资源在内存中的副本数量,同步意味着资源为单一副本,需要排队访问。

1.需要线程同步的原因:
Java 中允许多线程并行访问,同一时间段内多个线程同时完成各自的操作。但是多个线程同时操作同一个共享数据时,可能会导致数据不准确的问题。

2.线程同步的方法:
可以通过 synchronized 关键字修饰方法实现线程同步,每个Java 对象都有一个内置锁,内置锁会保护使用 synchronized 关键字修饰的方法,要调用该方法就必须先获得锁,否则就处于阻塞状态。

3。synchronized 关键字可以修饰实例方法,也可以修饰静态方法,两者在使用的时候是有区别的。
(1)给实例方法(非静态方法)添加 synchronized 关键字并不能实现线程同步。
(2)线程同步的本质是锁定多个线程所共享的资源,synchronized 还可以修饰代码块,会为代码块加上内置锁,从而实现同步。

4.如何判断线程是否同步?
(1)关键点
锁定的资源在内存中是一份还是多份?一份大家需要排队则线程同步,多份则线程不同步。(无论是锁定方法还是锁定对象,锁定类,只需要分析这个方法、对象、类在内存中有几份即可)。
(2)常见的
对象一般都是多份,类一定是一份。
方法看是静态方法还是非静态方法,静态方法一定是一份,非静态方法一般是多份。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值