java并发访问
① java开发在高并发访问下,数据返回速度很慢,有些甚至一直在转圈,该怎么解决,麻烦大神们给些帮助。
1、最基础的问题是看数据查询时过滤的字段是否已经建立索引了
2、若是对于数据时效性要求不高的话,可以加一层缓存读(redis)
3、数据库层可以建立从库,把读分离出来用从库读
② java中什么是并发性,他和static有什么关系
并发是指可以同时进行多个任务。
他跟static没有关系,是跟线程有关,java里并发安全我个人认为主要是两点:
1、数据资源竞争,也就是多个线程访问同一个资源,会造成安全问题;
2、原子性操作,也就是说我有一系列操作需要完成,但中间不得有其它线程影响到我的操作。
数据资源竞争:java里有2种变量,成员变量,局部变量
局部变量不会发生安全问题,因为局部变量是在方法里,每次这个方法执行都是一个独立的数据,不会被其他线程访问
成员变量则可能会影响并发安全,比如:非静态成员变量是每个对象自身所有,如果这个对象的某个方法访问了自身的成员变量,当这个对象被不同的线程多次调用这个方法时,你说是不是会有问题?静态成员变量则更加如此了,任何该类的对象都可以调用。
原子性操作:原子性说简单点就是一系列操作或过程必须是一个整体,否则就会造成意外。比如说:多个人在商店买同一个东西,从付钱、拿货、结算必须是一个整体,如果某个人已经把这个东西买走了,另一个人却处于付账阶段,那么最终肯定会出问题,但如果这三个操作是一个整体就不会有问题,只有一个人完全执行完了这3个,另一个人才能执行,二不允许同时进行。
当然我说的不一定准确,这个并发是很复杂的,你可以先了解个大概
java里解决并发安全是会牺牲性能的,但你要知道,1、并不是所有的并发安全都需要解决,有些在实际需求下是允许的,2、并发安全问题,不一定要靠并发安全去解决,也有可能是设计的缺陷。3、并发访问同一个资源不一定会出问题,比如:只有一个线程在写操作或者全部是读操作。