synchronized

Limiting concurrent access to a method

风流意气都作罢 提交于 2020-01-14 04:45:13
问题 I have a problem with limiting concurrent access to a method. I have a method MyService that can be called from many places at many times. This method must return a String , that should be updated according to some rules. For this, I have an updatedString class. Before getting the String , it makes sure that the String is updated, if not, it updates it. Many threads could read the String at the same time but ONLY ONE should renew the String at the same time if it is out of date. public final

Can GlusterFS notifies after synchronizations?

亡梦爱人 提交于 2020-01-14 02:53:26
问题 I have several questions about the way GlusterFS synchronizes files. Is there a way I can get notified when a synchronization has finished on a client or a server ? For instance, are synchronizations logged somewhere ? Let's say I want to synchronize a whole directory, will it be synchronized file by file or once for all ? This can actually be an important information if I want to use things like inotify on synchronized directories. 回答1: GlusterFS is not a file sync utility, it is a virtual

JAVA 多线程随笔 (二) sleep, yield, join, wait 和notify

点点圈 提交于 2020-01-14 00:19:23
这里先说明一下锁对象,如果一个类比如Person里的方法都有synchronized来修饰,那么每一个方法的锁对象就是Person的一个实例person. 锁对象也可以针对某个特定的实例, 比如synchronized(bird) {//code;}, 此时的锁对象就是bird这个实例。 1. sleep 使得当前线程睡一会,醒来后继续被服务。 这样就会让其他优先级的线程(较低,同级或是高优先级)得到机会执行。 *Sleep 不会释放对象锁 ,也就是虽然当前线程暂停运行,但是如果它有对应的锁对象(比如当前方法是synchronized修饰的), 其他线程都无法再得到this锁对象, 所以其他synchronized方法或是synchronized(this)修饰的代码块,都不会执行。 2. yield 使得当前线程还是就绪状态,它会首先查看是否有其他 同优先级 的线程,如果有,则运行其他线程,如果没有,就继续原来的线程。 *yield 也不会释放对象锁 3. join 线程A调用了线程B的join方法,那么线程A会等到线程B执行完后,才继续运行后边的代码。 sleep(),yield(),join()在Thread类中定义 3. wait, notify 和 notifyAll wait,notify 和 notifyAll都是用来执行同步的代码

Synchronized底层实现原理

给你一囗甜甜゛ 提交于 2020-01-13 18:55:41
文章目录 Synchronized底层实现原理 一、概述 1、Synchronized有什么用处? 2、Synchronized如何使用? 3、Java锁相关 二、实现原理 1、jvm基于进入和退出Monitor对象来实现方法同步和代码块同步。 2、Java对象头 3、锁优化 Synchronized底层实现原理 一、概述 1、Synchronized有什么用处? ​ 原子性:synchronized保证语句块内操作是原子的 ​ 可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现) ​ 有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”) ​ 相关锁类型:具有可重入锁、独占锁、非公平锁、悲观锁。 2、Synchronized如何使用? ​ 修饰实例方法,对当前实例对象加锁。 /** * synchronized 修饰实例方法 */ public synchronized void increase ( ) { i ++ ; } ​ 修饰静态方法,多当前类的Class对象加锁。 /** * synchronized 类对象加锁 */ public static synchronized void increase ( ) { i ++ ; } ​ 修饰代码块

多线程实现同步

血红的双手。 提交于 2020-01-13 15:38:57
多线程的三大特性: 原子性:即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行 可见性:当多个线程访问一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值 有序性:程序执行的顺序按照代码的先后顺序执行 多线程实现同步: 线程安全:当多个线程同时对共享的一个全局变量或者静态变量做写操作时,可能会发生数据冲突问题,也就是线程安全问题,但是做读操作是不会发生数据冲突问题 线程安全解决方法:使用多线程之间同步synchronized或者使用lock(锁)          同一时间只让当前一个线程进行对数据进行执行操作,当前线程执行完成后释放锁,才能让其他线程进行操作执行,避免了同时对数据的操作,这样的华就可以解决线程的不安全问题,也就是实现了数据的同步 synchronized两种用法: 第一种:将可能会发生线程安全问题的代码,给包括起来,称为同步代码块 第二种:在方法上修饰synchronized,称为同步函数 静态同步函数使用的锁是该函数所属字节码文件对象,可以使用getClass()方法获取,也可以用当前类名.class表示 同步的前提: 1.要有两个或者两个以上的线程,否则没有意义 2.多线程使用同一个锁 必须保证同步中只有一个线程运行 什么是Volatile? volatile是java提供的一种同步手段,它是轻量级的同步

多线程安全

痞子三分冷 提交于 2020-01-13 14:16:07
什么是线程安全问题? 当多个线程共享一个全局变量或者静态变量,做写的时候,可能会受到其他线程的干扰,导致数据有 问题,这种现象叫做线程干扰问题。 线程安全的解决办法: ① synchronized ——自动锁 ② lock----jdk1.5并发包——手动锁 synchronized的用法: 使用条件: ①必须要有两个线程以上,需要发生同步。 ②多个线程想同步,必须用同一把锁。 ③保证只有一个线程进行执行。 工作原理: ①有一个线程已经拿到了锁,其他线程已经有CPU执行权,一直排队,等待其他线程释放锁。 ②锁在代码执行完毕或者程序抛出异常都会被释放掉。 ③锁一旦被释放掉的话,其他线程就开始获取锁进去同步中去。 缺点: 工作效率非常低。 什么是同步代码块? 就是将可能会发生线程安全问题的代码,用“synchronized”给包括起来。 synchronized(同一个数据) { //可能会发生线程安全问题的代码 } 什么是同步函数? 在方法上用“synchronized”修饰,称之为同步函数。同步函数使用的是“this”锁。 什么是静态同步函数? 在同步函数上用静态关键字(static)修饰,称之为静态同步函数。静态同步函数使用当前类的字节码文件作为锁。 什么是多线程死锁? 就是同步中嵌套同步,导致锁无法释放的现象产生就是多线程死锁。 多线程三大特性: ①原子性:保证线程的独一无二

枚举java语言中的修饰符组合

对着背影说爱祢 提交于 2020-01-13 11:56:01
package model; /*22:37 2019/7/20*/ /* top class的修饰符组合 abstract final public 2 * 2 * 2 warning: abstract final 冲突 最终,共有2*(2*2-1)=6种修饰符组合用于top class */ /* public abstract class PublicAbstractClass{} public final class PublicFinalClass{} abstract class AbstractClass{} final class FinalClass{} public class PublicClass{} class Class{} 关于constructor的修饰符组合 abstract [DEFAULT] protected public 关于field的修饰符组合 4 * 2 * 2 * 2 * 2 权限 静态的 瞬态的 同步的 private 缺省 缺省 缺省 缺省 缺省 (not final) (not static) (not transient) (not volatile) protected public final static transient volatile warning: volatile final 冲突 最终,共有4*2*2

java常用的关键字

核能气质少年 提交于 2020-01-13 11:52:50
1、final关键字 final关键字可用于修饰类、方法以及变量。 修饰类:该类不能被继承,该类的所有方法和成员都被隐式地指定为final。 修饰方法:锁定方法,任何继承类都不能修改他,所有的private方法都被隐式地指定为final方法。 修饰变量:若修饰的变量为基本数据类型,该变量值被赋值后不可改变;若修饰的变量为引用类型的变量,该变量被初始化后不可再被定义指向另一个对象,但指向的对象的内容是可变的。 2、static变量 “全局”或者“静态”的意思,给类使用而不是给对象使用。 被static修饰的方法或变量,无须依赖对象实例去访问,只要类被加载了就可以通过类名直接去访问。原因:Java程序创建时,在类首次被加载时会优先执行static变量、方法或代码块,并为其分配固定的内存区域,JVM可以直接访问到他们,而不需要依赖某个特定的实例变量,并被类的所有实例共享。 修饰变量:静态变量被所有的对象所共享,在内存中只有一副本,当且仅当类初次加载时被初始化。 修饰方法:静态方法不依赖于任何对象就可以被访问,直接类名.方法名可以直接访问。因此,静态方法中不能访问非静态方法或非静态变量。工具类? 修饰代码块:同理,仅执行一次,提高代码效率。 注:static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。 3、public/private

搞懂线程、多线程和线程池,你的能力再上一层

我们两清 提交于 2020-01-13 07:09:04
实战是检验真理的唯一标准,这里笔者整理了一些关于线程、多线程和线程池的面试题,一起学习和思考,这里的代码和例子是Java写的,主要是能够通用的介绍相关知识,编程语言只是一种工具,没有说哪种工具就绝对好,关键是使用工具的人,以及我们项目的具体需求,当我们掌握了真正的知识点之后,对于不同的语言,那只是语法的不一样。好啦不装X了,这个文章前端后端都可以看,祝看到的人都有个好的未来! 1、开启线程的三种方式? 继承Thread类,重写run()方法,在run()方法体中编写要完成的任务 new Thread().start(); 实现Runnable接口,实现run()方法 new Thread(new MyRunnable()).start(); 实现Callable接口MyCallable类,实现call()方法,使用FutureTask类来包装Callable对象,使用FutureTask对象作为Thread对象的target创建并启动线程;调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。 FutureTask < Integer > ft = new FutureTask < Integer > ( new MyCallable ( ) ) ; new Thread ( ft ) . start ( ) ; 2、run()和start()方法区别 run

alternatives for volatile array

不问归期 提交于 2020-01-13 05:16:07
问题 From other questions, I learned that the elements of a volatile array are not volatile. Only the reference itself is volatile. volatile[] int data; Thread A: data[4] = 457; Thread B: System.out.println(data[4]); Here, Thread B might never see the updated value. Which options/alternatives do I have to achieve the same thing? I would like to avoid having to synchronize the array, since it is hardly ever altered. However, it is being read a lot by some threads. Synchronizing it will very likely