Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading_Runnable - Fatal编程技术网

Java 理解同步

Java 理解同步,java,multithreading,runnable,Java,Multithreading,Runnable,我试图自学线程,但似乎无法使synchronized()正常工作。这就是我正在做的: 在类测试中,我声明了一个变量 static String toggy = "false"; 然后使用此run方法创建runnable(MyRunnable): @Override public void run() { synchronized (toggy) { System.out.println("toggy for " + name + " BEFORE = " + togg

我试图自学线程,但似乎无法使synchronized()正常工作。这就是我正在做的:

在类测试中,我声明了一个变量

static String toggy = "false"; 
然后使用此run方法创建runnable(MyRunnable):

@Override
public void run() {
    synchronized (toggy) {
        System.out.println("toggy for " + name + " BEFORE = " + toggy);
        int b = 0;
        for(int i=0; i<1000; i++) {
            b++;
        }
        System.out.println("toggy for " + name + " AFTER = " + toggy);
        System.out.println("--------------------------------------------\n");

        if(toggy.equals("false")) {
            toggy = "true";
        } else if(toggy.equals("true")) {
            toggy = "false";
        }                                       
    }
}
@覆盖
公开募捐{
同步(toggy){
System.out.println(“toggy”表示“+name+”之前的“+toggy”);
int b=0;

对于(int i=0;i,通过向
toggy
分配不同的值(
String
实例),
synchronized
块锁定不同的对象:

synchronized ("false")
{
}
或:

这将允许多个线程输入
synchronized
要保护的块代码。请使用其他对象进行锁定:

static final Object lock = new Object();

synchronized (lock)
{
}

谢谢hmjd。我想我理解“toggy”的不同值的问题。但是为什么在“lock”上同步会起作用呢?所以,我可以在任何值不变的对象上同步?在具有有意义值的对象上同步什么时候正确?这里有更多讨论
synchronized ("true")
{
}
static final Object lock = new Object();

synchronized (lock)
{
}