x****o 发帖数: 29677 | 1 问个简单问题
CLASS A{
PUBLIC synchronized METHOD 1
PUBLIC synchronized METHOD 2
}
THREAD A
THREAD B
THREAD A ACCESS METHOD 1 SAME TIME THREAD B ACCESS METHOD 2
这里有什么问题 |
Y**G 发帖数: 1089 | 2 method 1 and method 2 won't be called on the same instance any time.
【在 x****o 的大作中提到】 : 问个简单问题 : CLASS A{ : PUBLIC synchronized METHOD 1 : PUBLIC synchronized METHOD 2 : } : THREAD A : THREAD B : THREAD A ACCESS METHOD 1 SAME TIME THREAD B ACCESS METHOD 2 : 这里有什么问题
|
x****o 发帖数: 29677 | 3
是LOCK,对吧?
【在 Y**G 的大作中提到】 : method 1 and method 2 won't be called on the same instance any time.
|
Y**G 发帖数: 1089 | |
x****o 发帖数: 29677 | 5
MD老印非说不是
【在 Y**G 的大作中提到】 : 对,就是打饭的时候得一个一个来,不许一拥而上
|
p*****2 发帖数: 21240 | |
x****o 发帖数: 29677 | 7
烙印问我这样是什么,我说有锁了,线程要一个个来
三哥说不会锁。。。
【在 p*****2 的大作中提到】 : 你问的是什么问题呀? : 烙印说不是是什么意思?
|
o**1 发帖数: 6383 | 8 老印说的对。
【在 x****o 的大作中提到】 : : 烙印问我这样是什么,我说有锁了,线程要一个个来 : 三哥说不会锁。。。
|
x****o 发帖数: 29677 | 9
同一个instance下不锁?两个thread都可以access?
【在 o**1 的大作中提到】 : 老印说的对。
|
p*****2 发帖数: 21240 | 10
你这个例子没看到有instance呀
【在 x****o 的大作中提到】 : : 同一个instance下不锁?两个thread都可以access?
|
|
|
x****o 发帖数: 29677 | 11
那个method都不是static的,何况要不是一个instance还锁啥
【在 p*****2 的大作中提到】 : : 你这个例子没看到有instance呀
|
p*****2 发帖数: 21240 | 12
所以你跟烙印没说到一起呀。
【在 x****o 的大作中提到】 : : 那个method都不是static的,何况要不是一个instance还锁啥
|
c*********e 发帖数: 16335 | 13 烙印说的对啊,如果是一个instance,会锁住。但是,如果2个thread是不同instance,
就不会锁住啊。
一般来说,可以在class A里面设置一个static int temp = 0;在method 1里面,如果
temp == 0, do something, then temp =1;在method 2里面,如果temp == 1,do
something, then temp = 0;见过有人用這種方法。
【在 x****o 的大作中提到】 : 问个简单问题 : CLASS A{ : PUBLIC synchronized METHOD 1 : PUBLIC synchronized METHOD 2 : } : THREAD A : THREAD B : THREAD A ACCESS METHOD 1 SAME TIME THREAD B ACCESS METHOD 2 : 这里有什么问题
|
c*********e 发帖数: 16335 | 14 你是说
CLASS A{
PUBLIC static synchronized METHOD 1
PUBLIC static synchronized METHOD 2
} ?
这倒可以试试。
【在 x****o 的大作中提到】 : : 那个method都不是static的,何况要不是一个instance还锁啥
|
z*******3 发帖数: 13709 | 15 阿三显然说错了,你的例子可行是因为对于int的赋值操作是原子操作
所以不会受到多线程的干扰,如果是一个对象,搞不好就挂了
还有就是,你的例子的控制锁在对象身上,而不是静态变量身上
所以do something并不会被多线程所打扰
你们居然这样用多线程,很危险啊
使用原子操作需要对jvm的机制了解才可以
否则老老实实用synchrnoized
如果这个int计算稍微复杂点,加加减减,再作一个pow
你这个估计就不精准了,异常可能倒是不太会抛,但是如果有除以0的话
那就有可能有异常出来
【在 c*********e 的大作中提到】 : 烙印说的对啊,如果是一个instance,会锁住。但是,如果2个thread是不同instance, : 就不会锁住啊。 : 一般来说,可以在class A里面设置一个static int temp = 0;在method 1里面,如果 : temp == 0, do something, then temp =1;在method 2里面,如果temp == 1,do : something, then temp = 0;见过有人用這種方法。
|
x****o 发帖数: 29677 | 16
你这同步锁改成逻辑了?
【在 c*********e 的大作中提到】 : 烙印说的对啊,如果是一个instance,会锁住。但是,如果2个thread是不同instance, : 就不会锁住啊。 : 一般来说,可以在class A里面设置一个static int temp = 0;在method 1里面,如果 : temp == 0, do something, then temp =1;在method 2里面,如果temp == 1,do : something, then temp = 0;见过有人用這種方法。
|
s*****n 发帖数: 5488 | 17 烙印说的队。
每个对象都有一个lock field. 相对于windows里面的critical section.
sync方法就是lock(this).
你这里两个对象是两个 CS,自然不会同步。
【在 x****o 的大作中提到】 : : 你这同步锁改成逻辑了?
|
b***i 发帖数: 3043 | 18 楼主的两个thread里面访问的是同一个instance
【在 s*****n 的大作中提到】 : 烙印说的队。 : 每个对象都有一个lock field. 相对于windows里面的critical section. : sync方法就是lock(this). : 你这里两个对象是两个 CS,自然不会同步。
|
r******r 发帖数: 700 | 19 concurrent access 只是相对意义上的并行,因为多线程对同一个对象的操作,总是
要通过加锁实现,比如 synchronized, 或 lock()。
所以 synchrnozied method 也是为了实现 concurrent 的目标,这样理解对么?
【在 Y**G 的大作中提到】 : method 1 and method 2 won't be called on the same instance any time.
|
p*****2 发帖数: 21240 | 20
不早就跟你说了这个说法不对吗?
【在 r******r 的大作中提到】 : concurrent access 只是相对意义上的并行,因为多线程对同一个对象的操作,总是 : 要通过加锁实现,比如 synchronized, 或 lock()。 : 所以 synchrnozied method 也是为了实现 concurrent 的目标,这样理解对么?
|
|
|
r******r 发帖数: 700 | 21 因为我还怀疑嘛 。。。
那你说说,怎样才能算 concurrent access?
【在 p*****2 的大作中提到】 : : 不早就跟你说了这个说法不对吗?
|
p*****2 发帖数: 21240 | 22
concurrency 就是多任务。同一时间能执行的任务越多并发性越高。
【在 r******r 的大作中提到】 : 因为我还怀疑嘛 。。。 : 那你说说,怎样才能算 concurrent access?
|
x****o 发帖数: 29677 | 23
我再多问一句吧,多个对象冲突实例是什么?意义是什么?
【在 s*****n 的大作中提到】 : 烙印说的队。 : 每个对象都有一个lock field. 相对于windows里面的critical section. : sync方法就是lock(this). : 你这里两个对象是两个 CS,自然不会同步。
|