java多线程中,如何给静态变量(如List)加锁/同步

java多线程中,如何给静态变量(如List)加锁/同步?
如果多个线程并发操作 static的list变量的增添和删除,会出现问题。
请问如何做同步处理,用synchronized好像不能用在属性上。

请高手帮忙,谢谢啦!

使用synchronized关键字同步方法就可以了。
public class Foo2 {
private int x = 100;
public int getX() {
return x;
}
//同步方法
public synchronized int fix(int y) {
x = x - y;
System.out.println("线程"+Thread.currentThread().getName() + "运行结束,减少“" + y + "”,当前值为:" + x);
return x;
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-13
静态变量加锁和普通变量没有什么不同。
只是要注意静态变量只有一个,多线程操作就很容易造成堵塞。

lz的问题应该是使用细节上出了细节问题,却概括、泛化成“怎么去使用静态变量”的大方面问题。极其不可取。
第2个回答  2011-11-13
把对list变量的操作写成一个独立的类的synchronized方法行不行呢?本回答被提问者采纳

多线程系统中如何使用静态变量
public class Test { public static void operation(){ \/\/ ... do something } } 事实证明只要在静态函数中没有处理多线程共享数据,就不存在着多线程访问同一个静态方法会出现资源冲突的问题。下面看一个例子:public class StaticThread implements Runnable { Override public void run() { \/\/ TO...

浅谈Java多线程的同步问题
从第二段代码可知 同步的关键是多个线程对象竞争同一个共享资源即可 上面的代码中是通过外部创建共享资源 然后传递到线程中来实现 我们也可以利用类成员变量被所有类的实例所共享这一特性 因此可以将lock用静态成员对象来实现 代码如下所示 代码 package vista;class MyThread implements java lang Runnab...

JAVA中当多个线程同步调用static方法或static变量的时候会产生冲突吗...
静态块的资源访问时不会有冲突的,单例么,比如车场是单例的,但是里面有很多车,每个客户来都可以分配单独的一辆车,所以多线程同步 也是不会冲突的

JAVA中线程在什么时候需要同步和互斥
1、线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。3、对于静态同步方法,锁是针对这个类的,锁对象是该类的Cla...

多线程同步有几种实现方法
代码如: public synchronized void save(){}123 注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类 2、同步代码块 即有synchronized关键字修饰的语句块。被该关键字修饰的语句块会自动被加上内置锁,从而实现同步。3、使用特殊域变量(volatile)实现线程同步 1)volatile...

java 多核处理器下会发生同时获取对象锁的情况吗
对象锁 当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放 同步静态方法\/静态变量互斥体 由于一个class不论被实例化多少次,其中的静态方法和静态变量在内存中都只由一...

java多线程调用静态方法安全吗
num最后应该输出55,但是在多线程情况下,则会出现每个线程输出的num不一样的情况,这是因为num是静态成员变量,为多个线程所共享的,有可能会出现一个线程的num值还没有重新赋值为0,另外一个线程已经读取到num的累加后的值,所以说,多线程情况下,静态方法中如果操作静态成员变量,...

java我有一个List想传入多线程的run方法?怎么传?
给你一个类似的类来参考下吧:import java.io.File;import java.util.ArrayList;public class ThreadDemo {public static void main(String args[]){int threadQuantity=3;Handle h=new Handle();h.initList();h.handle(threadQuantity);}}class Handle{private String fileName="C:\/\/";private ...

Synchronized原理
当线程试图获取锁时,会进入 _EntryList;获取锁后,线程进入 _Owner 区域并设置Monitor的owner变量。当线程调用wait()方法时,它会释放Monitor锁,让出机会给其他线程。Synchronized关键字在字节码层面通过monitorenter和monitorexit指令实现同步代码块和同步方法的加锁与解锁。在方法调用时,JVM会检查方法是否为...

...c# 中两个线程同时访问一个静态变量会不会死锁
线程可以设置优先级,优先级设置高的优先访问。死锁可以通过检索变量是否加锁,如果加锁就等待随机的时间重新尝试加锁的方法解决。

相似回答