自己打算用java写个多线程的爬虫,结果在存储爬取得到数据的时候遇到了难点
我是打算把采集到的网页放在mysql数据中,然后问题来了
假设我开启了50个线程,然后爬取得到的每一个网页存储到一个对象,然后把对象放入集合当中,之后当对象里面的容量满到1000就写入一次数据库。但是感觉这样会有点问题
但是多个线程同时操作一个集合,怎么保证安全呢,不会出错吗
或者大神们提供一点更好的思路,初学java,讲的详细点吧
自己打算用java写个多线程的爬虫,结果在存储爬取得到数据的时候遇到了难点
我是打算把采集到的网页放在mysql数据中,然后问题来了
假设我开启了50个线程,然后爬取得到的每一个网页存储到一个对象,然后把对象放入集合当中,之后当对象里面的容量满到1000就写入一次数据库。但是感觉这样会有点问题
但是多个线程同时操作一个集合,怎么保证安全呢,不会出错吗
或者大神们提供一点更好的思路,初学java,讲的详细点吧
楼上正解,或者把集合读写代码放在synchronized代码块里
...
synchronized (set) {
set.add(page);
}
...
synchronized (set) {
insertToDb(set);
set.clear();
}
...
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
用Collections.synchronizedSet把你的集合变成线程安全的