麻烦看下这几种代码的有关问题,多谢各位
麻烦看下这几种代码的问题,谢谢各位!
1.
public class a {
private static List<entity> lie;
public void Set(){
给lie赋值
}
}
2.
public class a {
private List<entity> lie;
public void Set(){
给lie赋值
}
}
3.
public class a {
public static List<entity> lie;
public void Set(){
给lie赋值
}
}
上面3种代码,哪几个会有问题?谢谢大家!
------解决思路----------------------
1和3不是一样的?然后不懂你的意思,你这种写法编译都是能通过的,static方法才要求被调用的类变量是static的,你非static的方法去调用赋值从编译角度讲没错
------解决思路----------------------
线程安全是要看你应用场景的,不是单纯的说有没有,理论上第二种应该是没有的,但如果它的载体a被用到了其它地方,并且被static readonly了,那第二种写法在多线程的情况下也会有线程安全的问题
------解决思路----------------------
线程安全问题不是通过你这里的代码看的,关键是看static变量在多线程进行变更时的线程控制知否存在问题。
------解决思路----------------------
List<T>并不是线程安全的,.net4.0新引入的System.Collections.Concurrent命名空间下的类才是线程安全的。
------解决思路----------------------
贴错了,不好意思。。。。
------解决思路----------------------
要线程安全,请加锁吧.
------解决思路----------------------
问题 说清楚,你不说,谁知道你问的是线程问题。。。
你上面那三个都会有线程问题 ,在set里面加个lock
------解决思路----------------------
1和3肯定有问题啊,静态变量是共享的,反正托管堆里就只有一个空间给它,哪条线程访问或者设置,都是同一个地址,你学会能安全吗?
不过你1号里把静态变量私有化,不允许外部访问罢了,但对于多次new a()来说,它们访问可设置的都是托管堆里同一个地址,这和3号差不多,只不过3号允许外部访问这个地址罢了
像楼上几位说的,想要安全式的,就得用他们说的方式
1.
public class a {
private static List<entity> lie;
public void Set(){
给lie赋值
}
}
2.
public class a {
private List<entity> lie;
public void Set(){
给lie赋值
}
}
3.
public class a {
public static List<entity> lie;
public void Set(){
给lie赋值
}
}
上面3种代码,哪几个会有问题?谢谢大家!
------解决思路----------------------
1和3不是一样的?然后不懂你的意思,你这种写法编译都是能通过的,static方法才要求被调用的类变量是static的,你非static的方法去调用赋值从编译角度讲没错
------解决思路----------------------
线程安全是要看你应用场景的,不是单纯的说有没有,理论上第二种应该是没有的,但如果它的载体a被用到了其它地方,并且被static readonly了,那第二种写法在多线程的情况下也会有线程安全的问题
------解决思路----------------------
线程安全问题不是通过你这里的代码看的,关键是看static变量在多线程进行变更时的线程控制知否存在问题。
------解决思路----------------------
List<T>并不是线程安全的,.net4.0新引入的System.Collections.Concurrent命名空间下的类才是线程安全的。
------解决思路----------------------
贴错了,不好意思。。。。
------解决思路----------------------
要线程安全,请加锁吧.
------解决思路----------------------
问题 说清楚,你不说,谁知道你问的是线程问题。。。
你上面那三个都会有线程问题 ,在set里面加个lock
------解决思路----------------------
1和3肯定有问题啊,静态变量是共享的,反正托管堆里就只有一个空间给它,哪条线程访问或者设置,都是同一个地址,你学会能安全吗?
不过你1号里把静态变量私有化,不允许外部访问罢了,但对于多次new a()来说,它们访问可设置的都是托管堆里同一个地址,这和3号差不多,只不过3号允许外部访问这个地址罢了
像楼上几位说的,想要安全式的,就得用他们说的方式