如果我在java类X中不使用任何setter/getter。当一个线程a具有类X的类级锁时,另一个线程B是否可以直接更改我的静态变量??
public class X {
Integer static_variable = 10;
public static void doNothing {
/* Do Nothing */
}
}
假设线程A现在有类级锁。我可以从另一个线程B执行X.static\u variable=11吗?
我正在编写一段代码,以在java中获得死锁。
公共类A实现Runnable{
public static Integer as = 5;
static A a = new A();
static B b = new B();
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Thread thread1 = new Thread(a);
Thread thread2 = new Thread(b);
thread1.setName("First");
thread2.setName("Second");
thread1.start();
thread2.start();
}
public void run() {
runme();
}
public static synchronized void runme() {
try {
System.out.println(Thread.currentThread().getName() + " has object a's key and waiting");
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + " Woke up from sleep");
System.out.println(Thread.currentThread().getName() + " wants b's Key");
B.bs = 10;
System.out.println(Thread.currentThread().getName() + " over");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
公共类B实现Runnable{
public static Integer bs = 6;
public void run() {
runme();
}
public static synchronized void runme() {
try {
System.out.println(Thread.currentThread().getName() + " has object b's key and waiting");
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + " Woke up from sleep");
System.out.println(Thread.currentThread().getName() + " wants a's Key");
A.as = 10;
System.out.println(Thread.currentThread().getName() + " over");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
但得到以下结果:
第二个有对象b的钥匙和等待第一个有对象a的钥匙和等待第一个从睡眠中醒来第二个从睡眠中醒来第二个想要a的钥匙第二个超过第一个想要b的钥匙第一个超过
第二个线程显然正在编辑类A的静态变量,即使另一个线程持有类A的类级锁
是的,你可以。除非在变量更改代码周围有一个同步块。如果不使用同步,则其他线程不必在更改其静态变量之前获取X.class的监视器。
将字段设置为私有,并添加一个setter,使其同步,这样,当另一个线程持有X.class的锁时,您将无法更改字段
问题内容: 根据Java,静态变量可以通过类名访问,但是即使Java不建议使用静态变量,类对象也可以访问它们,并且给出相同的答案。 我知道该变量只有一个副本,并且所有对象和其他事物的值都相同。Java为什么建议使用类名而不是类对象? 问题答案: 因为可能会造成混淆!静态成员上没有动态调度。 看一下这个令人困惑的代码:(可能是语法错误;我的Java生锈了) 看起来很混乱,因为方法似乎是多态的,所以输
rank ▲ ✰ vote url 26 568 149 609 url 类里的静态变量 有可能在python中类有静态变量或方法?用什么语法实现? 变量是在类定义时声明的,不是在类方法或静态变量中: >>> class MyClass: ... i = 3 ... >>> MyClass.i 3 上面的"i"变量是类级别的,所以它是和所有实体级的"i"变量是不一样的,你可以: >>>
问题内容: 我有以下类别,将其用作项目中所有模型的基础: 然后,我尝试通过以下方式对其进行扩展: 但是,如果我尝试执行以下操作: 然后,而不是查询:,它生成查询:“从空WHERE id =?中选择SELECT ID”。因此,覆盖类中的字段似乎没有任何效果。 我该如何克服呢?如果我在BaseModel中添加了一个方法,并在的构造函数中对其进行了调用,那么该类的所有方法都可以使用的新值吗? 问题答案:
我有以下代码: 当我尝试编译它时,会出现以下错误: 因此,我尝试使dbConnect静态如下:
问题内容: 将变量声明为的区别是什么 要么 如果我只希望变量是局部的,并且是常量(以后不能更改)? 谢谢 问题答案: 仅仅具有预期的效果。 声明static使其成为一个类变量,使其可以使用类名进行访问
我写了一个简单的类和3个测试如下: 个人测试。爪哇: 测试numberOfPersons失败,消息为:java。lang.AssertionError:预期: