例如类有一个类变量,该类变量会被多个类方法读写,当多线程操作该类的实例对象时,如果线程对类变量有读取、写入操作就会发生类变量读写错误,即便是在类方法前加上synchronized也无效,因为同一个线程在两次调用方法之间时锁是被释放的,这时其它线程可以访问对象的类方法,读取或修改类变量。这种情况下可以将类变量放到ThreadLocal类型的对象中,使变量在每个线程中都有独立拷贝,不会出现一个线程读取变量时而被另一个线程修改的现象。
解决方案 »
- ireport 启动报错 4.7的 有能解决的吗
- acitonform中属性长度的问题 急!!!
- 使用status中的include标签插入2个jsp页面的问题
- 新手问题,找不到servlet.jar
- weblogic8.1不知是何原因的问题
- Can't start a cloned connection while in manual transaction mode?是什么错误
- 求dom的帮助文件?
- 请问java Api 文档在那下载?sun 公司网站我不懂英文。
- 我不知道这里怎么配置了,我用的是jboss,
- mybatis自动生成的代码怎么添加多表关联操作呀??
- 帮我看看我的 oracle自定义函数哪儿写错了?
- Activiti 流程 获取 获取当前流程的 目标
public class Test{
public static void main(String[] args) throws Exception{ Thread t1 = new Thread(new ThreadTest(10));
t1.start();
Thread t2 = new Thread(new ThreadTest(20));
t2.start();
Thread t3 = new Thread(new ThreadTest(30));
t3.start();
Thread t4 = new Thread(new ThreadTest(40));
t4.start();
Thread t5 = new Thread(new ThreadTest(50));
t5.start();
}
}
class ThreadTest implements Runnable{
public static int i = 0;
public ThreadTest(int i){
ThreadTest.setI(i);
} public void run(){
System.out.println(ThreadTest.getI());
} public static int getI() {
return i;
} public static void setI(int i) {
ThreadTest.i = i;
}
}
多执行下以上代码,输出的不是10 20 30 40 50