Java线程同步方法

用户1050619

我正在尝试使用同步方法运行示例线程模块,但结果与预期的不一样。

因为我已经同步了m1(),所以我希望线程1完全打印值0 ... 10,然后线程2开始运行。

但是,在这种情况下,数字是交替打印的...

package threadexample;

public class Test implements  Runnable{
    public void run(){
        m1();
    }
    public synchronized void m1(){
        for (int i = 0; i < 10; i ++){
            System.out.println(Thread.currentThread().getName() + " Value of i = " + i);
        }
    }
    Test(String threadname){
        super();
    }

    public static void main(String[] args){
            Test a = new Test("A");
            Test b = new Test("B");
            Thread t1 = new Thread(a);
            Thread t2 = new Thread(b);
            t1.start();
            t2.start();

    }   

}



Output:

Thread-0 Value of i = 0
Thread-1 Value of i = 0
Thread-0 Value of i = 1
Thread-1 Value of i = 1
Thread-0 Value of i = 2
Thread-1 Value of i = 2
Thread-0 Value of i = 3
Thread-1 Value of i = 3
Thread-0 Value of i = 4
Thread-1 Value of i = 4
Thread-0 Value of i = 5
Thread-1 Value of i = 5
Thread-0 Value of i = 6
Thread-1 Value of i = 6
Thread-0 Value of i = 7
Thread-1 Value of i = 7
Thread-0 Value of i = 8
Thread-1 Value of i = 8
Thread-0 Value of i = 9
Thread-1 Value of i = 9
Sotirios Delimanolis

您有synchronized一个实例方法。它将在实例本身上同步。但是,您Thread每个都使用不同的实例,即。它们各自synchronized位于不同的对象上,因此不会互相阻塞。

您需要分享您的Test实例

Test a = new Test("A");
Thread t1 = new Thread(a);
Thread t2 = new Thread(a);

synchronized在其他共享对象上使用。您可以通过将锁定对象作为构造函数参数传递或使用静态字段引用来实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java-具有同步方法的多线程练习

来自分类Dev

方法同步线程问题

来自分类Dev

使用多种方法进行线程同步

来自分类Dev

Java-4个线程在两个同步方法中操作相同的对象数据

来自分类Dev

在同步方法内部的线程中的同步块会发生什么?

来自分类Dev

线程1正在以Java同步方法1执行,然后线程2可以在Java同步方法2中执行吗?

来自分类Dev

修改同步方法后,所有Java线程都会看到共享资源更新吗?

来自分类Dev

修改同步方法后,所有Java线程都会看到共享资源更新吗?

来自分类Dev

Java基本同步线程

来自分类Dev

当线程进入Java中的同步块/方法时会发生什么情况

来自分类Dev

Java线程同步失败

来自分类Dev

Java线程同步失败

来自分类Dev

同步线程对象的run()方法

来自分类Dev

Java同步方法未同步

来自分类Dev

Java:同步线程失败

来自分类Dev

Java线程:同步块

来自分类Dev

Java使用getState方法与线程同步

来自分类Dev

Java-如何从另一个线程访问静态同步方法?

来自分类Dev

方法同步线程问题

来自分类Dev

Java线程同步

来自分类Dev

多线程同步两个方法的java

来自分类Dev

Java基本同步线程

来自分类Dev

线程何时可以输入同步方法?

来自分类Dev

Java多线程-如何同步

来自分类Dev

Java同步方法未同步

来自分类Dev

Java多线程同步块

来自分类Dev

同步方法多线程应用程序

来自分类Dev

java线程同步块

来自分类Dev

如何在方法之间同步线程?