java 爬虫多线程读取同一个集合

自己打算用java写个多线程的爬虫,结果在存储爬取得到数据的时候遇到了难点
我是打算把采集到的网页放在mysql数据中,然后问题来了
假设我开启了50个线程,然后爬取得到的每一个网页存储到一个对象,然后把对象放入集合当中,之后当对象里面的容量满到1000就写入一次数据库。但是感觉这样会有点问题

但是多个线程同时操作一个集合,怎么保证安全呢,不会出错吗
或者大神们提供一点更好的思路,初学java,讲的详细点吧

阅读 4.3k
2 个回答

用Collections.synchronizedSet把你的集合变成线程安全的

楼上正解,或者把集合读写代码放在synchronized代码块里

...
synchronized (set) {
  set.add(page);
}
...
synchronized (set) {
  insertToDb(set);
  set.clear();
}
...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题