我对synchronized关键字的用法和重要性有一些疑问.
synchronized关键字有什么意义?synchronized?我想知道何时使用静态方法?假设我有一个带有几个getter和setter的类,一个或两个方法,我希望这些方法只能在类的实例对象上调用.这是否意味着我应该使用静态方法?
例如
Obj x = new Obj();
x.someMethod
Run Code Online (Sandbox Code Playgroud)
要么
Obj.someMethod
Run Code Online (Sandbox Code Playgroud)
(这是静态方式吗?)
我很困惑!
在Java中,我们使用final带变量的关键字来指定其值不被更改.但我发现你可以改变类的构造函数/方法中的值.同样,如果变量是,static那么它是编译错误.
这是代码:
import java.util.ArrayList;
import java.util.List;
class Test {
private final List foo;
public Test()
{
foo = new ArrayList();
foo.add("foo"); // Modification-1
}
public static void main(String[] args)
{
Test t = new Test();
t.foo.add("bar"); // Modification-2
System.out.println("print - " + t.foo);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,没有错误.
现在将变量更改为static:
private static final List foo;
Run Code Online (Sandbox Code Playgroud)
现在是编译错误.这final真的有用吗?
这可能是有史以来最愚蠢的问题,但我认为这对新手来说完全是一个混乱.
String不可改变的?StringBuilder比首字母和副词更受欢迎?一个很好的例子(在Java中)将非常感激.
public static voidJava 中的含义是什么?
我正在学习.在我public static void正在使用的书中的所有示例中,都是在使用或创建的任何方法之前.这是什么意思?
我知道synchronize在方法之前使用关键字会为该对象带来同步.也就是说,将同步运行相同对象实例的2个线程.
但是,由于同步是在对象级别,因此将不会同步运行该对象的不同实例的2个线程.如果我们在由该方法调用的Java类中有一个静态变量,我们希望它在该类的实例之间进行同步.这两个实例在两个不同的线程中运行.
我们可以通过以下方式实现同步吗?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
是不是因为我们已经定义了一个lock静态的对象并且我们正在使用该synchronized锁的关键字,所以静态变量count现在在类的实例之间同步Test?
您能否澄清一下,为什么 在课堂上我们将最终关键字作为不可变关键字时需要它.我的意思是,如果我们将所有属性声明为private和final,那么它也是一个不可变类,不是吗?
对不起,如果问题看起来很容易,但我真的很困惑.帮帮我.
Editted:我知道一个声明final的类不能被子类化.但是如果每个属性都是私有的,那么最终会有什么区别呢?
java ×8
final ×3
immutability ×3
class ×1
keyword ×1
methods ×1
object ×1
string ×1
synchronized ×1