synchronized

Synchronized and locks in singleton factory

痞子三分冷 提交于 2019-12-13 16:52:13
问题 I have a singleton factory (edit: renamed "loader" to avoid confusion with factory pattern) that creates objects (in my example DAOs) or returns them if already created: public class DAOLoader { private static final DAOLoader INSTANCE = new DAOLoader(); private UserDAO userDAO; private MessageDAO messageDAO; private final Object lockUserDAO = new Object(); private final Object lockMessageDAO = new Object(); private DAOLoader() {} public static DAOLoader getInstance() { return INSTANCE; }

Java 多线程应知应会

送分小仙女□ 提交于 2019-12-13 14:25:03
请简单说说 synchronized 关键字的底层原理 java 说到多线程绝对绕不开 synchronized,很多 java 工程师对 synchronized 是又爱又恨。为什么呢?主要原因包括以下几点: 在网上找到的各种学习资料,内容杂乱很多都是基于老版本写的,自己实践起来发现和网上说的不一样,不是那么回儿事儿。烦躁…… 每次出去面试都会问这个问题,又没法直接看源码。烦躁 在小公司的开发同事们一定会发现,如果是做 javaWeb 项目的,在实际工作中很少会遇到多线程的问题。因为数据量小,请求数量小等各种原因。 所以经过这段时间的学习总结(瞎看,瞎扒拉),我想在这里简单输出一下我对 synchronized 关键字的底层原理的理解。 monitor 计数器 这里先声明一个前提,synchronized 是可重入锁,也就是说已加锁的对象可以再次被获取到锁的线程再次加锁。是不是有点绕嘴,看看下面这段代码: public class SynchronizedDemo { public static void main(String[] args) { SynchronizedDemo synchronizedDemo = new SynchronizedDemo(); synchronizedDemo.test(); } public synchronized void test(

If you have a lock on an object, do you have a lock on all its methods?

社会主义新天地 提交于 2019-12-13 14:23:54
问题 Say we have a object foo: class Foo(){ public synchronized void instanceMethod(){} } var foo = new Foo(); if I have a lock on foo: synchronized(foo){ foo.instanceMethod(); } do I also have a lock on the instanceMethod() call? Another way of asking the question - if I have a lock on foo, can another thread call foo.instanceMethod() (simultaneously)? 回答1: if I have a lock on foo, can another thread call foo.instanceMethod()? They can call it, but the call will wait until execution leaves your

C语言中volatile关键字的使用

こ雲淡風輕ζ 提交于 2019-12-13 12:56:44
volatile是一个类型修饰符(type specifier),就像我们熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量;volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。 volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。 作用 编辑 简单地说就是防止编译器对代码进行优化。比如如下程序: 1XBYTE[2]=0x55; 2XBYTE[2]=0x56; 3XBYTE[2]=0x57; 4XBYTE[2]=0x58; 对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一地进行编译并产生相应的机器代码(产生四条代码)。 例子 编辑 精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1)并行设备的硬件寄存器(如:状态寄存器) 2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3)多线程应用中被几个任务共享的变量 这是区分C程序员和嵌入式系统程序员的最基本的问题

AbstractQueuedSynchronizer in Java concurrent

£可爱£侵袭症+ 提交于 2019-12-13 12:05:01
问题 What is AbstractQueuedSynchronizer in Java's concurrent.locks package used for? Can someone shed some light on its methods doAcquireInterruptibly and parkAndCheckInterrupt ? 回答1: What is AbstractQueuedSynchronizer in concurrent.locks package used for The AbstractQueuedSynchronizer is the building blocks for synchronization constructs that are used and implemented (at the very least) in the java.util.concurrency package. For instance, the ReentrantLock delegates to a Sync which extends

JAVA专业术语面试100问

﹥>﹥吖頭↗ 提交于 2019-12-13 10:48:29
前言: 面试技巧另外开篇再说,先上面试干货吧。 Redis、 消息队列、 SQL 不要走开,关注后更精彩! 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用size()方法。 6、Java支持的数据类型有哪些?什么是自动拆装箱? 7、int 和 Integer 有什么区别? 8、Java类的实例化顺序? 父类静态成员和静态代码块 -> 子类静态成员和静态代码块 -> 父类非静态成员和非静态代码块 -> 父类构造方法 -> 子类非静态成员和非静态代码块 -> 子类构造方法 9、什么是值传递和引用传递? 10、String能被继承吗?为什么? 11、String和StringBuilder、StringBuffer的区别? StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况(是线程不安全的) StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况(一般很少)(是线程安全的) 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder >

Java Synchronized and Threads

断了今生、忘了曾经 提交于 2019-12-13 10:39:15
问题 I'm having issues with Synchronized not behaving the way i expect, i tried using volatile keyword also: Shared Object: public class ThreadValue { private String caller; private String value; public ThreadValue( String caller, String value ) { this.value = value; this.caller = caller; } public synchronized String getValue() { return this.caller + " " + this.value; } public synchronized void setValue( String caller, String value ) { this.caller = caller; this.value = value; } } Thread 1: class

concurrency 同步

拟墨画扇 提交于 2019-12-12 18:22:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> concurrency 同步 avoid excessive synchronization 避免过度使用synchronization Here is an example,which implements an observable set wrapper.It allow clients to subscribe to notifications when elements are added to the set.this is the Observer pattern. for brevity`s, the class does not provide notifications when elements are removed from the set. 这有一个观察着封装的set,它允许客户端订阅添加元素的通知,为了简介,没有提供移出元素的通知。 Observers subscribe to notifications by invoking the addObserver method and unsubscribe by invoking the removeObserver method. In both cases, an instance of the callback

How do I synchronize access to a property that has didSet?

末鹿安然 提交于 2019-12-12 18:08:38
问题 How do I synchronize access of a property that uses didSet (using GCD or objc_sync_enter)? I have a property that has a property observer. How can I use a private queue to synchronize get/set of the property var state: State = .disconnected { // Q: How to sync get/set access here? didSet { // do something } } 回答1: simplest way is using a serial queue import Dispatch struct S { private var i: Int = 0 { didSet { print("someone did set new value:", i) } } private let queue = DispatchQueue(label:

concurrency

浪子不回头ぞ 提交于 2019-12-12 17:56:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> avoid excessive synchronization 避免过度使用synchronization Here is an example,which implements an observable set wrapper.It allow clients to subscribe to notifications when elements are added to the set.this is the Observer pattern. for brevity`s, the class does not provide notifications when elements are removed from the set. 这有一个观察着封装的set,它允许客户端订阅添加元素的通知,为了简介,没有提供移出元素的通知。 Observers subscribe to notifications by invoking the addObserver method and unsubscribe by invoking the removeObserver method. In both cases, an instance of the callback interface is passed to