java中是不是没做同步控制的对象都是线程不安全的???

突然想问,java中为什么Hashtable是线程安全的,而HashMap是线程不安全的?还有ArrayList为什么是线程不安全的,Vector是线程安全的??于是乎我就想是不是Hashtable、Vector内部实现中进行了同步控制。于是我就想,是不是没做同步控制的对象就不是线程不安全的??

如果一个函数不访问成员函数,只访问局部变量和参数,那么它就不需要同步,也是线程安全的。(当然,这个函数内部不能调用线程不安全的其他函数)
这种函数是不变的(immutable),一个不变的函数,给定输入参数,返回值就给定了。比如说三角函数。
有的函数,它的返回值不但受到参数的影响,而且受到对象状态的影响,这种函数就需要同步。

String类是线程安全的,线程安全不安全是看有没有改变状态的变量。在开发中,service层一般都是线程安全的,因为所包含的变量Dao是安全的,
只有方法。若函数的变量是基本类型和string类型,则这个函数是安全的。函数中定义的对象,若没有返回出去也是线程安全的,因为它会放在方法
栈中。线程安全是一个难的知识点,建议看一下。关于ArrayList和HashMap不是线程安全的,可以百度一下看一下别人的解答。