如何从API文档中知道方法是否synchronized
看一些资料,比如:说到Stack类时,有方法:
public synchronized Object pop()
public synchronized Object peek()
public synchronized int search(Object o)
(参见http://blog.csdn.net/treeroot/archive/2004/09/18/109068.aspx)
但我查了JDK 的API文档,没有有关synchronized的修饰,后来查了网上,说到从javadoc 1.2开始:
从签名中删除“synchronized”和“native”。Javadoc 生成 API 规范。这两个关键字不属于规范的签名,因为它们与实现相关。无需生成关键字“native”的文档。关键字“synchronized”指示对线程安全的行为,应该在方法描述中进行描述。对线程安全的方法本身可能不使用关键字 "synchronized ",但可能调用 private 方法。
旧行为:Javadoc 1.1 包括关键字“synchronized”和“native”。
(参见http://www.iplab.cs.tsukuba.ac.jp/~liuxj/jdk1.2/zh/docs/tooldocs/javadoc/whatsnew.html)
但问题是我查了Stack,里面没有看到任何有关synchronized的描述和说明。我的问题是:
1)Stack的一系列方法是否synchronized方法
2)在使用一个新的类方法时,大家是如何从API文档中判断它是否synchronized?
谢谢!
------解决方案--------------------这个应该跟你在实际应用中,是否需要同步有关吧?
------解决方案--------------------import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Stack;
public class Test() {
public static void main(String[] args) {
Method[] ms = java.util.Stack.class.getDeclaredMethods();
System.out.printf( "Class: %s%n ", Stack.class.getName());
System.out.printf( "%-15s%-15s%-15s%n ", "method name ", "synchronized? ", "navtive? ");
System.out.println( "---------------------------------------- ");
for(Method m:ms){
System.out.printf( "%-15s%-15s%-15s%n ",
m.getName(),
Modifier.isSynchronized(m.getModifiers()),
Modifier.isNative(m.getModifiers()));
}
}
}
试试看以上的代码吧,另外,Method中有个toGenericString()可以看到该方法的原型。
另外,API中好像看不出方法的synchronized修饰的。
------解决方案--------------------package com.reflect;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
* @author fmj
*
*/
public class IsSynchronized {
public static void main(String[] args) {
final String CLASS_NAME = "java.util.Stack ";
try {
Class c = Class.forName(CLASS_NAME);
Method[] ms = c.getDeclaredMethods();
System.out.printf( "Class: %s%n ", c.getName());
System.out.printf( "%-15s%-15s%-15s%n ", "method name ",
"synchronized? ", "navtive? ");
System.out.println( "---------------------------------------- ");
for (Method m : ms) {
System.out.printf( "%-15s%-15s%-15s%n ", m.getName(), Modifier
.isSynchronized(m.getModifiers()), Modifier.isNative(m
.getModifiers()));
}
} catch (Exception e) {
System.out.println( "Exception!!! ");
}
}
}
------解决方案--------------------汗,打开源代码看看吧