在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。
知道synchronized是干什么的了,但还是不理解“同步”二字表示什么意思?与其作用关联不到一起;
synchronized是用来控制线程不能同步的,多个线程不能同时执行某段代码的步骤,应该是这样理解的吧?
synchronized同步的意思就是,在一个cpu时间片里,只能有一个线程执行这段synchronized修饰的代码,其他的线程是不可以访问的,必须等待这个cpu时间片结束。syschronized锁的是代码,锁了后,这部分代码针对线程来说是按照cpu时钟频率访问的依次访问,线程就不能同时访问了。时间片,就是我们说的电脑的时钟频率 Ghz,你的理解也没错
Java提供了一种内置锁机制来支持原子性就是同步代码块 synchronized锁{代码块}。同步代码块的锁就是方法调用所在的对象,静态同步方法以当前类的Class对象作为锁 。
就是你说的,多个线程不能同时执行某段代码的步骤。同步二字不一定准确,不如说互斥更准确
如果一段代码在多个线程中使用,但同时只能被一个线程执行,就需要对此段使用同步关键词。
如果你使用这个sychronized不能理解的话,你看看这个
ReentractLock这个类进行锁的控制是如何实现的。
同步指的是当线程去request的时候与它相关的另外一个线程要进行等待,而不是去处理其他的
至于锁的功能那是为了保证临界资源可以被安全的访问,这是访问安全的控制,和这个同步是两码事
程序运行时,当前线程会尝试获得synchronized关键字指定的对象上的锁,获取得锁后才行执行它所修饰的代码块,否则将一直在锁等待中,由于同一单位时间,对象上的锁只能被一个线程持有,所以通过它避免了并发问题.
修饰代码块时,须明确指定对象;修饰方法时,所同步的对象是当前类对象,如静态方法则是当前类的Class对象
各位解释的都很好,补充一点,Java中所有Object都有两个方法,wait与notify
这个就是配合synchronized一起使用的,当线程A执行完数据对象操作,就通过数据对象的notify方法通知线程B
(前提是B已经处于等待数据对象状态,说白了就B也要执行同步的数据对象)