多线程还是单例?全局变量访问应该如何设计
多线程环境中,要对变量进行访问。是进行多线程锁资源好,还是使用一个单例模式比较好?
单例模式是不是会造成资源竞争的问题?
class RUN implements Runnable{
private Data data;
@Override
public void run(){
{
同步(data)
}
}
}
------解决方案--------------------只读的话单例或静态化就可以了.
如果是有读有写的话就得加锁了.
------解决方案--------------------你这个是单例的成员变量使用多线程了。如果存在并发访问,做线程同步是必须的。没什么互斥的,而是必须这么组合。
------解决方案--------------------1.单例模式,并不能解决同步问题,相反在多线程环境中,单例模式会可能引发同步问题,如果不是单例同步没有意义。
2.在多线程环境中,单例模式可能会造成资源竞争,主要看在代码中是否使用属性(即在类中属于全局变量)),并且对属性有写操作,就可能会出现数据同步问题。
3.在多线程环境中,如果方法中使用类变量(即静态字段),并且对类变量有写操作,就可能会出现数据同步问题。
------解决方案--------------------并发度一旦上来的话,不锁资源,写入资源的话就有问题了
是的。有些资源不允许多线程访问的,必须要做同步