Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安全递增整数的方法有哪些?_Java_Thread Safety - Fatal编程技术网

Java 安全递增整数的方法有哪些?

Java 安全递增整数的方法有哪些?,java,thread-safety,Java,Thread Safety,除了使用同步方法或AtomicInteger之外,还有其他方法进行线程安全整数增量吗?您也可以在单个对象上进行同步 例如: Integer myInteger = 0; synchronized(myInteger) { myInteger += 1; } 也可以在单个对象上进行同步 例如: Integer myInteger = 0; synchronized(myInteger) { myInteger += 1; } 我们有以下可用的同步选项: 1) volatile(

除了使用同步方法或AtomicInteger之外,还有其他方法进行线程安全整数增量吗?

您也可以在单个对象上进行同步

例如:

Integer myInteger = 0;
synchronized(myInteger) {
    myInteger += 1;
}

也可以在单个对象上进行同步

例如:

Integer myInteger = 0;
synchronized(myInteger) {
    myInteger += 1;
}

我们有以下可用的同步选项:

1)
volatile
(但这并不能使++安全)

2) AtomicInteger(最好的,无锁)

3)
synchronized

4) java.util.concurrent.locks框架


因此,第三种方法是使用ReentrantLock,我们有以下可用的同步选项:

1)
volatile
(但这并不能使++安全)

2) AtomicInteger(最好的,无锁)

3)
synchronized

4) java.util.concurrent.locks框架


所以第三种方法是使用ReentrantLock,因为它是先读后写的


您必须使用锁定机制(例如
同步
,但也可以使用
锁定
)或原子操作

不,因为先读后写


您必须使用锁定机制(例如
同步
,但也可以使用
锁定
)或原子操作

你为什么还需要别的办法?AtomicInteger是您的最佳选择,因为它不会锁定,所以不会有风险或性能损失。如果您需要有关同步的更多信息,这可能会有所帮助:为什么需要其他方法?AtomicInteger是您的最佳选择,因为它不会锁定,所以不会有风险或性能损失。如果您需要有关同步的更多信息,这可能会有所帮助:如果您使用同步块访问,则volatile帮助如果您使用同步块访问,则volatile帮助