A. java多线程中,如何给静态变量(如List)加锁/同步
使用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;
}
}
B. Java多线程访问文件往文件里写东西时加上一个锁,
synchronized (变量){
语句
}
synchronized 方法(){
}
C. java多线程读一个变量需要加锁吗
如果只是读操作,没有写操作,则可以不用加锁,此种情形下,变量加上final关键字;
如果有写操作,但是变量的写操作跟当前的值无关联,且与其他的变量也无关联,则可考虑变量加上volatile关键字,同时写操作方法通过synchronized加锁;
如果有写操作,且写操作依赖变量的当前值(如:i++),则getXXX和写操作方法都要通过synchronized加锁。
D. java多线程加锁是对谁加锁
多线程 会产生 线程安全问题;
加锁是为了使目标 变量不能被多个线程同时访问 而产生线程安全问题;
该变量 就是共享数据;
对共享数据加锁能保证 线程访问共享数据的时候,需要“排队”----一个一个的操作该数据
从而避免了线程安全问题;
E. Java多实例多线程同步加锁的问题
代码写的就有问题
因为synchronized写在线程里了,也就是说,你new了多线程,它们都在执行自己的代码
而并不是多线程执行同一段代码,所以这里并没有起到同步的作用
你应该把这个方法放到线程的外面去(放你的App这个类),让多个线程去调用就能体现出来了
F. java给异步线程加锁起作用
告诉别的线程,现在“我”锁定了,“你”等会再拿(变量)来使用