非同步线程和同步线程之间的区别

时间:2016-05-16 08:22:07

标签: java multithreading synchronization

问题在于我没有看到同步块的效果。在理论上,我知道它会锁定块,直到它完成它当时正在处理的线程。当我使用或不使用synchronized块运行以下代码时,没有任何变化,至少这是我的想法。基本上,我如何使这些线程有序地显示?请把它清理一下,谢谢。

public class Threads9 extends Thread{
    private String name;

    public Threads9(String paramName){
        name = paramName;
    }

    public void run() {
        print();
    }
    private void print() {
        synchronized(this){
        for(int i = 0;i<10;i++){
            System.out.println(name+ " looping");
        }
      }
    }
}

public class Threads9Main{
    public static void main(String[] args) {

        Threads9 thread1 = new Threads9("Thread1");
        Threads9 thread2 = new Threads9("Thread2");

        thread1.start();
        thread2.start();
    }
}

3 个答案:

答案 0 :(得分:1)

您正在同步“this”,并且线程之间有所不同。 尝试同步:Threads9.class,它会工作。 此外,大幅增加循环大小,或者第一个将在第二个开始之前完成。

答案 1 :(得分:0)

您的对象没有共享监视器,因此您不会进行任何线程间通信。

尝试:

public class Threads9 extends Thread{ private String name;

    private static Object lock = new Object();

    public Threads9(String paramName){
        name = paramName;
    }

    public void run() {
        print();
    }

    private void print() {
        synchronized(lock){
            for(int i = 0;i<10;i++){
                System.out.println(name+ " looping");
            }
        }
    }
}

答案 2 :(得分:0)

像这样更改代码并将synchronized块放入运行中。

public Threads9(String paramName){
    name = paramName;
}

public void run() {
    synchronized(this){
    print();
    }
}

private void print() {

    for(int i = 0;i<10;i++){
        System.out.println(name+ " looping");
    }

}