2012-03-17 100 views
1

我想知道静态方法java.lang.Math.max(int a, int b)是否线程安全?java.lang.Math.max(int a,int b)线程安全吗?

如果它不是线程安全的,你能解释一下这种情况下,由于多线程的并发访问,这种方法给出了错误的输出,并带有一段代码?

+7

您有超过30个问题没有被接受的答案。 +1提出可回答的问题。 – 2012-03-17 15:15:09

+0

@PeterLawrey,但不是一个真正的问题,所以-1。 – EJP 2012-03-18 21:29:22

回答

9

您只会从至少有一个线程修改状态的共享状态的并发访问中获得线程安全问题。

Math.max(a, b)没有任何状态,共享或其他线程安全。

+0

你究竟是什么意思的“国家”?你的意思是静态方法?那么所有的静态方法变成线程安全的?! :-) – siva636 2012-03-17 16:14:04

+4

按州来说,我的意思是可以从一个州改变到另一个州。例如c = 0,后来它是c = 5.在Java中,必须有被更改的字段。 – 2012-03-17 16:18:20

+2

或者数据库查询或文件系统访问。这也算作国家。 – 2012-03-17 21:07:27

12

Math.max是完全无状态的,所以它完全是线程安全的。

+0

你究竟是什么意思的“国家”?你的意思是静态方法?那么所有的静态方法变成线程安全的?! :-) – siva636 2012-03-17 16:15:08

+1

一个方法是_stateless_,如果它总是会在同一个输入上返回相同的输出。 – 2012-03-17 20:16:08

+1

@Louis:不一定,一个方法可以写入一个文件(这不是线程安全的),同时为任何输入返回0。 – danielkza 2012-03-24 04:38:01

14

线程安全,为什么不是?它没有状态,当你调用它时没有任何对象被修改。该方法只是一个if语句:

public static int max(int a, int b) { 
    return (a >= b) ? a : b; 
} 
+0

“state”的意思是什么?你的意思是静态方法?那么所有的静态方法变成线程安全的?! :-) – siva636 2012-03-17 16:15:30

相关问题