多线程中的同步
Synchronization in multi threading
我是多线程的初学者,遇到了这个概念:
2 methods m1 being non static synchronised and m2 being static
synchronised and 2 threads T1 accessing m1 with object o1 and T2
accessing m2 can run concurrently since m1 and m2 are synchronised on 2
different objects.
那么为什么在下面的例子中线程不能并发访问方法,即使对象是不同的 Foo.class 和 f1 和 f2?
class Foo implements Runnable{
void run()
synchronised(Foo.class)
{
....
}
}
}
class Test{
psvm(){
Foo f1 = new Foo();
Foo f2 = new Foo();
Thread t1 = new Thread(f1);
Thread t2 = new Thread(f2);
t1.start();
t2.start();
}
}
2 methods m1 being non static synchronised and m2 being static
synchronised and 2 threads T1 accessing m1 with object o1 and T2
accessing m2 can run concurrently since m1 and m2 are synchronised on
2 different objects.
非静态方法m1在this
(当前实例)上同步,静态方法m2在this.getClass()
(当前实例所属的class对象)上同步。它们在不同的对象上同步,所以它们不能互相阻塞。
在发布的代码中,synchronized 块有一个显式监视器锁 Foo.class
,不同的 Foo
实例共享相同的 Foo.class
,这意味着代码在 同一个对象。因此,只有一个线程可以进入同步块,其他线程将被阻塞直到它存在。
在您的代码中,同步已作为 class 级别锁定 完成。
当一个线程正在访问时,另一个线程等待轮到它..
当你想限制并发性时使用同步,这样所有线程都可以轮到他们访问资源
我是多线程的初学者,遇到了这个概念:
2 methods m1 being non static synchronised and m2 being static synchronised and 2 threads T1 accessing m1 with object o1 and T2 accessing m2 can run concurrently since m1 and m2 are synchronised on 2 different objects.
那么为什么在下面的例子中线程不能并发访问方法,即使对象是不同的 Foo.class 和 f1 和 f2?
class Foo implements Runnable{
void run()
synchronised(Foo.class)
{
....
}
}
}
class Test{
psvm(){
Foo f1 = new Foo();
Foo f2 = new Foo();
Thread t1 = new Thread(f1);
Thread t2 = new Thread(f2);
t1.start();
t2.start();
}
}
2 methods m1 being non static synchronised and m2 being static synchronised and 2 threads T1 accessing m1 with object o1 and T2 accessing m2 can run concurrently since m1 and m2 are synchronised on 2 different objects.
非静态方法m1在this
(当前实例)上同步,静态方法m2在this.getClass()
(当前实例所属的class对象)上同步。它们在不同的对象上同步,所以它们不能互相阻塞。
在发布的代码中,synchronized 块有一个显式监视器锁 Foo.class
,不同的 Foo
实例共享相同的 Foo.class
,这意味着代码在 同一个对象。因此,只有一个线程可以进入同步块,其他线程将被阻塞直到它存在。
在您的代码中,同步已作为 class 级别锁定 完成。
当一个线程正在访问时,另一个线程等待轮到它..
当你想限制并发性时使用同步,这样所有线程都可以轮到他们访问资源