做大数据抓取的应当都知道,多线程爬取数据能够有效的提供工作效率、降低运营成本。那么在编程爬虫代码的时候如果保证线程安全呢? 下面我们就来聊一聊。
1、什么是线程安全问题
就是多线程环境中,且存在数据共享,一个线程访问的共享数据被其他线程修改了,那么就发生了线程安全问题,整个访问过程中,无一共享的数据被其他线程修改了就是线程安全的
程序中如果使用成员变量,且对成员变量进行数据修改,就存在数据共享问题,也就是线程安全问题
2、为什么会有线程安全问题?
当多个线程同时共享一个全局变量,或者静态变量,进行写的操作时,可能会发生数据的冲突问题,也就是线程安全问题,但是做读的操作不会引发线程安全问题
线程安全
指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行结果一样的,不存在执行程序时出现意外结果
线程不安全
线程不安全是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
3、如何解决线程安全问题
使用同步机制,使得在同一时间只能有一个线程修改共享数据。
消除共享数据,即多个线程数据不共享或者共享的数据不被做修改如果使用成员变量,对成员变量不进行修改。
(同步代码块同步方法Notiy锁)
4、什么是线程同步
当有一个线程在对内存进行操作时.其他线程都不可以对这个内存地址进行操作,其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。
理解共享只有共享资源的读写才需要同步,如果不是共享资源那么就不需要同步了。
线程同步其实实现的是线程排队。
防止线程同步访问共享资源造成冲突。
变量需要同步,常量不需要同步(常量存在方法区)。
多个线程访问共享资源的代码有可能是同一份代码也有可能是不同一份代码,无论是否执行同一份代码只要这些线程的代码访问同一份可变的共享资源,这些线程之间就需要同步。
标签:同步,代码,爬虫,安全,线程,共享,多线程,数据 From: https://blog.51cto.com/u_13488918/5929148