public class Person extends Thread {
private static int count = 10;
public void decrement() {
synchronized(Person.class) {
count--;
}
}
public int getCount() {
return count;
}
public void run(){
while( count > 0){
this.decrement();
System.out.print(this.getCount() + ",");
}
}
}
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
Person p4 = new Person();
Person p5 = new Person();
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
}
}
8,8,7,6,5,4,3,2,1,0
8,7,5,3,1,0,6,8,4,0
原始代码中的内容如下:
因为您锁定的是减量,而不是减量和输出在一起,所以它看起来是多次减量。
this.decrement();
System.out.print(this.getCount() + ",");
public class Person extends Thread {
private static int count = 10;
public int decrement() {
synchronized(Person.class) {
count = count - 1;
return count;
}
}
public int getCount() {
synchronized(Person.class) {
return count;
}
}
public void run(){
while( getCount() > 0){
int count = this.decrement();
System.out.println(count);
}
}
}
import java.util.concurrent.atomic.AtomicInteger;
public class Person extends Thread {
private static AtomicInteger count = new AtomicInteger(10);
public int decrement() {
return count.decrementAndGet();
}
public void run(){
while(count.get() > 0){
int currentCount = this.decrement();
System.out.print(currentCount + ",");
}
}
}
如何从多个线程同时访问静态变量。 如果我有这样的课 我需要访问线程1的值,比如 从线程2中,我需要设置如下值 这会导致内存冲突吗?。如果是,建议使用什么方法来处理这种情况?。
我一直在读java中的同步,我有一个问题。我看到的例子是,一个类在一个本地对象上创建一个同步块。或者一个同步的方法。这两个都不适合我的情况。所以我有一个类的静态实例,它保存了整个应用程序的所有数据。该类上的变量被创建为“private”,我创建了getter来检索这些值。其中一些值一次只需要一个线程从应用程序中的不同类访问。由于它们被创建为private,所以我使用同步块,如下所示。。。 我可以通
我使用TestNG是为了使用Appium并行运行自动移动测试。 我在一个类中有一个初始化AppiumDriver对象的方法。 我从我的TestNG类中调用这个方法,以便每个线程创建它自己的驱动程序实例。问题是,因为它是一个静态变量,当每个线程试图通过静态方法从另一个类访问驱动程序时: 始终存在冲突,因为每个线程只能访问AppiumDriver对象的单个实现。 我知道我可以绕过这一点,把所有这些代码
问题内容: 任何人都可以解释以下语句吗……“静态同步方法和非静态同步方法不会互相阻塞-它们可以同时运行” 问题答案: 锁定对象在静态方法和非静态方法上有所不同。静态方法将Class对象用作锁(锁obj:),而非静态方法将实例对象用作锁,此时方法的调用已绑定到该对象(锁obj:)。
问题内容: 这个问题与我在这里提出的问题有些相关。现在,我有一个“控制器”类,它由主要方法和所有摆动组件组成。有一个名为“ VTOL”的类,其中包含一个名为“ altitude”的变量(到目前为止,我已经将此变量声明为volatile)。 这是一个由在后台运行的线程组成的类: 首先,我最初面临的问题是我无法更新“ altitude”的值,在整个程序执行过程中它始终保持为0。所以我宣布它为易失性的(
问题内容: 类的静态成员是否在每个进程或线程中仅作为单个实例存在?意思是每个线程都具有自己的类的静态成员变量副本吗? 我的猜测是每个过程,对吗? 问题答案: 静态 字段 为每个类加载器提供一个值。 如果需要每个线程的值,请设置static 。