class aaaa
{
private String ii;
public void xyz()
{
.........这里面操作ii
} public void abc()
{
private String jj;
..................这里面操作jj
}
public static String mn(String kk)
{
................这里操作kk
return kk;
}
}就像上面的类。都是非静态的方法,这样的操作每个用户调用的时候都会new一下。那么我是这样认为的,xyz方法是线程不安全的。abc方法是线程安全的。mn是线程不安全的。不知道对不对。
我有下面的问题:
一、每个用户执行xyz的时候都会先new一下。那么这时就会分配一个新的内存给此用户。那么每个用户操作的ii都不会是同一个内存里的对象。怎么会引起线程不安全呢?
二、方法abc是绝对线程安全的吗?
三、mn是个静态方法,操作的是同一个内存,那么如果并发的时候,会出现线程安全的问题。可是我看了很多介绍,说是静态方法如果不调用静态的成员,就不会是线程安全的。
所以我乱了。自己的想法也不太肯定了。特来问问。谢谢了。
{
private String ii;
public void xyz()
{
.........这里面操作ii
} public void abc()
{
private String jj;
..................这里面操作jj
}
public static String mn(String kk)
{
................这里操作kk
return kk;
}
}就像上面的类。都是非静态的方法,这样的操作每个用户调用的时候都会new一下。那么我是这样认为的,xyz方法是线程不安全的。abc方法是线程安全的。mn是线程不安全的。不知道对不对。
我有下面的问题:
一、每个用户执行xyz的时候都会先new一下。那么这时就会分配一个新的内存给此用户。那么每个用户操作的ii都不会是同一个内存里的对象。怎么会引起线程不安全呢?
二、方法abc是绝对线程安全的吗?
三、mn是个静态方法,操作的是同一个内存,那么如果并发的时候,会出现线程安全的问题。可是我看了很多介绍,说是静态方法如果不调用静态的成员,就不会是线程安全的。
所以我乱了。自己的想法也不太肯定了。特来问问。谢谢了。
解决方案 »
- strut2 <s:form> 取值问题
- servlet查询数据库时,在JSP显示时出现问题?进入页面一定要点击按钮,刷新页面都不起作用的,,,只有点击按钮之后才能查出数据,显示在页面>>请高手帮帮,,,,,,
- 想学JSP大家给点意见,有什么好的电子资料方便学习(提供地址)
- struts 的 message resource问题
- 急!寻求帮助!网页的连动显示问题?
- jsp:怎样判断一个字符串中A的数量?
- 如何让相同的用户名不能重复登陆。
- 共享文件访问不到,求高人解答
- 为什么有的时候页面不提交
- 那位大哥教我如何配置TOMCAT的SERVLET的位置??谢谢啊/
- 使用自定义标签,一旦刷新,标签失效。这是怎么回事?
- SQL安装出现错误!搞过JDBC的朋友给点学习建议吧!
二、方法abc是绝对线程安全的吗?
三、mn是个静态方法,操作的是同一个内存,那么如果并发的时候,会出现线程安全的问题。可是我看了很多介绍,说是静态方法如果不调用静态的成员,就不会是线程安全的。
所以我乱了。自己的想法也不太肯定了。特来问问。谢谢了。
//
1:调用xyz不一定要new一下, aaaa a = new aaaa();
aaaa b = a;
a.xyz();
b.xyz();
这样可以吧,所以xyz是线程危险的
2. 如果方法操作局部变量,是线程安全的
3. 第三种说法,你表达的意思不是很明确
--------------------------------------------------------------
回复:明明有一个public static String mn(String kk),调用这个函数不用new。ClassA aa = new ClassA();
ClassA bb = new ClassA();
aa 和 bb 是不同的,在内存中所占的空间亦不相同,不会引起“线程不安全”一、每个用户执行xyz的时候都会先new一下。那么这时就会分配一个新的内存给此用户。那么每个用户操作的ii都不会是同一个内存里的对象。怎么会引起线程不安全呢?
--------------------------------------------------------------
回复:你的线程不安全是由同时调用同一个对象实例的xyz()方法引起,而不是调用不同实例引起。二、方法abc是绝对线程安全的吗?
--------------------------------------------------------------
是安全的。--我认为,没有充足理由。每次调用abc(),里面的jj(注,这个变量名真别扭)都会被初始化。三、mn是个静态方法,操作的是同一个内存,那么如果并发的时候,会出现线程安全的问题。可是我看了很多介绍,说是静态方法如果不调用静态的成员,就不会是线程安全的。
--------------------------------------------------------------
这不矛盾,只要静态方法不去操作成员变量,是不会引起的。
你有两个概念没有搞清楚,一个是“static”的用法,另一个是你说讲的“线程安全”。线程安全主要是由同时调用非synchronized方法来操作类的成员变量引起的。上述言论,未经严谨测试,错误之处海涵。
????那么,同时调用非synchronized方法一定会引起线程安全的问题吗?
如果string只是个符号,可以代表其他类型的话,那么三个方法都没有同步,又如何线程安全?
哈哈!!同意:PoemCode(诗意代码之魔数)
答:每次都new,的确不会存在线性安全的问题,但是java常见的作法,是把一个类的引用,作为参数传到另外一个类的方法中的,这样,其实多个线程都是引用同一内存地址中的某个类的,这样就会造成线程不安全,所以要把这些方法用synchronize修饰,那么这个方法同一时间内只能被一个线程调用。二、方法abc是绝对线程安全的吗?
答:不是,原因同上。三、mn是个静态方法,操作的是同一个内存,那么如果并发的时候,会出现线程安全的问题。可是我看了很多介绍,说是静态方法如果不调用静态的成员,就不会是线程安全的。
答:静态方法也有可能不是线性安全的,静态方法操作的变量,也是存在于某一内存地址中的,多个线程同一时间对这个内存地址进行存取,就不安全了。