摘要:
1.可见性 本质是在告诉jvm当前变量在寄存器(工作内存)中的值不确定,需要从主存中读取。 2.禁止重排序 对它执行的指令不可以乱序,防止了其他线程拿到一个半初始化的对象,使用内存屏障。 阅读全文
摘要:
synchronized关键字 1.原子性 2.可见性 理解 java早期版本中,synchronized属于重量级锁,效率底下,java的线程是映射到操作系统的原生线程之上的。 唤起和挂起,都需要原生系统帮忙完成。 java6之后java官方从jvm层面对synchronized较大的优化,如:自 阅读全文
摘要:
两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中,而submit()方法返回有计算结构的Future对象,它定义在ExecutorService接口中,它拓展了Executor接口,其他线程池类像ThreadPoolExecutor和Sche 阅读全文
摘要:
Yield方法可以暂停当前正在执行的线程对象,让其他有相同优先级的线程执行。它是一个静态方法而且只保证当前线程放弃CPU占用而不能保证其它线程一定能占用CPU,执行yield()的线程有可能在进入到暂停状态后马上又被执行。 Thread t1 = new Thread(() -> { System. 阅读全文
摘要:
SynchronizedMap实现上在调用Map的所有方法是,对整个map进行了同步! public V put(K key, V value) { synchronized (mutex) {return m.put(key, value);} } ConcurrentHashMap的实现却更加精 阅读全文
摘要:
/** * 控制线程的执行循序 T1 -> T2 -> T3 * join实现 */ public static void join(){ Thread t1 = new Thread(() -> { System.out.println("hello my is T1!"); }); Thread 阅读全文
摘要:
1.底层实现上来说? Synchronized是JVM层面的锁,是Java关键字,通过monitor对象来完成。 ReentranLock是API层面的锁底层使用AQS。 2.是否可手动释放锁? synchronized不需要用户手动释放锁。 ReentranLock可以手动释放锁,一般通过lock 阅读全文