您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

有关Java线程同步

2024/3/28 15:18:43发布12次查看
1、synchronized方法。
public synchronized void save(){}

2、synchronized代码块。
synchronized(object){  }

3、使用volatile变量。
使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新,因此每次使用该域就要重新计算,而不是使用寄存器中的值。
4、使用重入锁(reenreantlock)
public void save(int money) {     lock.lock();     try {         account += money;     } finally {         lock.unlock();     } }

5、使用threadlocal变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。
6、使用阻塞队列(linkedblockingqueue等)
7、使用原子变量(atomicinteger等)
总结:
synchronized:
在偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会尽可能的进行优化synchronize。synchronized是在jvm层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,jvm会自动释放锁定。
reentrantlock:
reentrantlock提供了多样化的同步,比如有时间限制的同步,可以被interrupt的同步(synchronized的同步是不能interrupt的)等。在资源竞争不激烈的情形下,性能稍微比synchronized差点点。但是当同步非常激烈的时候,synchronized的性能一下子能下降好几十倍。而reentrantlock确还能维持常态。lock是通过代码实现的,要保证锁定一定会被释放,就必须将unlock()放到finally{}中。
atomic:
在不激烈情况下,性能比synchronized略逊,而激烈的时候,也能维持常态。激烈的时候,atomic的性能会优于reentrantlock一倍左右。
1、synchronized方法。
public synchronized void save(){}

2、synchronized代码块。
synchronized(object){  }

3、使用volatile变量。
使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新,因此每次使用该域就要重新计算,而不是使用寄存器中的值。
4、使用重入锁(reenreantlock)
public void save(int money) {     lock.lock();     try {         account += money;     } finally {         lock.unlock();     } }

5、使用threadlocal变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。
6、使用阻塞队列(linkedblockingqueue等)
7、使用原子变量(atomicinteger等)
总结:
synchronized:
在偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会尽可能的进行优化synchronize。synchronized是在jvm层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,jvm会自动释放锁定。
reentrantlock:
reentrantlock提供了多样化的同步,比如有时间限制的同步,可以被interrupt的同步(synchronized的同步是不能interrupt的)等。在资源竞争不激烈的情形下,性能稍微比synchronized差点点。但是当同步非常激烈的时候,synchronized的性能一下子能下降好几十倍。而reentrantlock确还能维持常态。lock是通过代码实现的,要保证锁定一定会被释放,就必须将unlock()放到finally{}中。
atomic:
在不激烈情况下,性能比synchronized略逊,而激烈的时候,也能维持常态。激烈的时候,atomic的性能会优于reentrantlock一倍左右。
以上就是有关java线程同步的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product