2 u010477502 u010477502 于 2016.02.14 16:10 提问

synchronized java “同步”

在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。
知道synchronized是干什么的了,但还是不理解“同步”二字表示什么意思?与其作用关联不到一起;

synchronized是用来控制线程不能同步的,多个线程不能同时执行某段代码的步骤,应该是这样理解的吧?

7个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.14 16:46

Java提供了一种内置锁机制来支持原子性就是同步代码块 synchronized锁{代码块}。同步代码块的锁就是方法调用所在的对象,静态同步方法以当前类的Class对象作为锁 。

91program
91program   Ds   Rxr 2016.02.14 18:02

如果一段代码在多个线程中使用,但同时只能被一个线程执行,就需要对此段使用同步关键词。

a719195733
a719195733   2016.02.14 16:28

synchronized同步的意思就是,在一个cpu时间片里,只能有一个线程执行这段synchronized修饰的代码,其他的线程是不可以访问的,必须等待这个cpu时间片结束。syschronized锁的是代码,锁了后,这部分代码针对线程来说是按照cpu时钟频率访问的依次访问,线程就不能同时访问了。时间片,就是我们说的电脑的时钟频率 Ghz,你的理解也没错

wxcshawn
wxcshawn   2016.02.14 17:13

就是你说的,多个线程不能同时执行某段代码的步骤。同步二字不一定准确,不如说互斥更准确

fk002008
fk002008   2016.02.14 18:38

如果你使用这个sychronized不能理解的话,你看看这个
ReentractLock这个类进行锁的控制是如何实现的。

同步指的是当线程去request的时候与它相关的另外一个线程要进行等待,而不是去处理其他的
至于锁的功能那是为了保证临界资源可以被安全的访问,这是访问安全的控制,和这个同步是两码事

ApolloLuna
ApolloLuna   2016.02.16 15:48

程序运行时,当前线程会尝试获得synchronized关键字指定的对象上的锁,获取得锁后才行执行它所修饰的代码块,否则将一直在锁等待中,由于同一单位时间,对象上的锁只能被一个线程持有,所以通过它避免了并发问题.
修饰代码块时,须明确指定对象;修饰方法时,所同步的对象是当前类对象,如静态方法则是当前类的Class对象

jia20003
jia20003   2016.02.16 22:27

各位解释的都很好,补充一点,Java中所有Object都有两个方法,wait与notify
这个就是配合synchronized一起使用的,当线程A执行完数据对象操作,就通过数据对象的notify方法通知线程B
(前提是B已经处于等待数据对象状态,说白了就B也要执行同步的数据对象)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!