标签:
1.
只要你的静态方法不访问全局变量的话,就不会有并发问题
访问全局变量肯定会出现并发问题,这是毫无疑问的
静态方法内部的变量,都是局部变量,每次调用静态方法时都会重新分配内存空间,所以是安全的。 也就是是说只要你的静态方法不访问全局变量的话,就不会有并发问题
JAVA代码验证实验我一直想做,但是没有时间,如果哪位有兴趣,可以提供一下。
2.
并发是指可以同时进行多个任务。
他跟static没有关系,是跟线程有关,java里并发安全我个人认为主要是两点:
1、数据资源竞争,也就是多个线程访问同一个资源,会造成安全问题;
2、原子性操作,也就是说我有一系列操作需要完成,但中间不得有其它线程影响到我的操作。
数据资源竞争:java里有2种变量,成员变量,局部变量
局部变量不会发生安全问题,因为局部变量是在方法里,每次这个方法执行都是一个独立的数据,不会被其他线程访问
成员变量则可能会影响并发安全,比如:非静态成员变量是每个对象自身所有,如果这个对象的某个方法访问了自身的成员变量,当这个对象被不同的线程多次调用这个方法时,你说是不是会有问题?静态成员变量则更加如此了,任何该类的对象都可以调用。
原子性操作:原子性说简单点就是一系列操作或过程必须是一个整体,否则就会造成意外。比如说:多个人在商店买同一个东西,从付钱、拿货、结算必须是一个整体,如果某个人已经把这个东西买走了,另一个人却处于付账阶段,那么最终肯定会出问题,但如果这三个操作是一个整体就不会有问题,只有一个人完全执行完了这3个,另一个人才能执行,二不允许同时进行。
当然我说的不一定准确,这个并发是很复杂的,你可以先了解个大概
java里解决并发安全是会牺牲性能的,但你要知道,1、并不是所有的并发安全都需要解决,有些在实际需求下是允许的,2、并发安全问题,不一定要靠并发安全去解决,也有可能是设计的缺陷。3、并发访问同一个资源不一定会出问题,比如:只有一个线程在写操作或者全部是读操作。
标签:
原文地址:http://www.cnblogs.com/qishuai/p/4499834.html