当前位置: 首页 > news >正文

动态网站建设心得体会seo搜索引擎优化步骤

动态网站建设心得体会,seo搜索引擎优化步骤,湘潭做网站找磐石网络一流,建网站 京公网安多线程爬虫是一种同时运行多个线程来提高爬取速度的爬虫方式。通过将大量的工作分配给不同的线程,可以减少爬虫的运行时间,提高效率。不过需要注意的是,在爬取过程中需要合理的管理线程数,以避免对被爬取的网站造成过大的负荷。 …

多线程爬虫是一种同时运行多个线程来提高爬取速度的爬虫方式。通过将大量的工作分配给不同的线程,可以减少爬虫的运行时间,提高效率。不过需要注意的是,在爬取过程中需要合理的管理线程数,以避免对被爬取的网站造成过大的负荷。

一、线程基础

1、继承Thread方式的线程

当需要再此启动一个线程时,需要再创建对象,不能重复使用。

2、推荐的创建线程方式:继承Runnalbe,使用Thread类

1.5之前就这两种
callable 第三种
可以有返回值 call()
可以抛出异常
支持泛型返回值
需要借助FutureTask, 如获取返回值的时候

class MyThread implements Callable{public Object call() throws Exception{....return null;}
}MyThread thread = new MyThread();
FutureTask f = new FutureTask(thread);
new Thread(f).start();
new Thread(f).start(); // 反复执行不会执行,需要定义新的task
try{Object ret = f.get();// get()为返回值,会阻塞主线程执行
}catch(InterruptedException){}catch(Execution e){}

在这里插入图片描述

线程池 第四种方式

提高速度,降低资源消耗
便于线程管理:核心池大小,最大线程数,没任务多长时间终止

//Executors 工具类
//ExecutorService 接口
ExecutorService service = Executors.newFixedThreadPool(10);
ThreadPoolExecutor executor = (ThreadPoolExecutor)service;
executor.setxxx() //设置参数
service.execute(Runnable);
service.submit(Callable);
service.shutdown();

b

在这里插入图片描述

4、线程分类

守护线程,用户线程

守护线程服务用户线程

thread.setDaemon(true) //设置为守护线程

最简单程序main主线程与gc回收线程

若没有用户线程jvm则结束

5、线程生命周期

NEW : 创建对象
RUNNABLE :运行 start
BLOCKED:阻塞 sleep,join,等待同步锁,wait,suspend:过时方法
WAITING:wait()
TIMED-WAITING:wait(time)
TERMINATED:stop,exception,run结束
阻塞—》就绪:sleep,join结束获取同步锁,notify,resume:过时方法

6、注意

wait:阻塞,会释放锁,必须在synchronized内
sleep:阻塞,不会释放锁,任何时候可以
wait,notify,notifyall,必须在同步方法快内,方法内,不能使用lock,他们调用时是锁对象.wait,要注意 此时syn(锁对象),两个所对象必须相同

二、线程同步

sync

与wait搭配,notify搭配,若与Lock搭配会造成异常

多用while,不用if

同步代码块,synchronized 自动锁

要求所有相乘同一把锁 synchronized(obj) obj是同一个对象,或同一个类

同步方法:当方法内容全部需要同步时

非静态方法锁即时this 需要注意

静态方法时,锁时当前类本身

Lock :接口 1.5之后

condition

能够手动开启同步,结束同步,手动锁,指定睡眠,指定唤醒

实现类

ReentrantLock:功能与synchronized,可重入锁

ReentrantReadWriteLock.ReadLock,有读锁的线程可以共享该方法,几乎相当于没加锁

ReentrantReadWriteLock.WriteLock,其他线程不共享该方法

ReentrantLock lock = new ReentrantLock();
final Condition flag1=lock.newCondition();
final Condition flag2=lock.newCondition();
try{lock.lock();flag1.await();...
}finally{lock.unlock();
}
flag2.singal();

三、线程通信

定制化通信:

/* 例:
* 切菜
* 炒菜
* 上菜
* 同时10道菜
*/
// 这里就不能用sync,需要定制化通信(唤醒睡眠的线程)
// 顺序:线程 操作 资源类
CookingLockcondation flag1,flag2,flag3cut()cooking()gaving()
Cookingnew thread(()->{for(int i=0;i<5;i++)cooking.cut();}).start()new thread(()->{for(int i=0;i<5;i++)cooking.cooking();}).start()new thread(()->{for(int i=0;i<5;i++)cooking.giving();}).start()

lambda表达式
接口可写静态方法实现,
普通方法实现,加default 关键字即可

四、JUC工具类

数据库中读写一般不是同步的

JUC中读写都是同步的,即读写同步,因为JVM线程必须加锁,否则不安全,比数据库严格

ReentraReadWriteLock:读写锁,写程序优先

CountDownLatch:计数器

CountDown count = new CountDown(10);
count.await();  // 到此方法时会判断count里面的数值,为0时继续主线程,适用于秒杀业务

CyclicBarrier:循环栅栏,多个线程处于同一状态时,才继续CyclicBarrier任务。

CyclicBarrier = cyc = new CyclicBarrier(7,任务)for (int i=0;i<7;i++)new Thread(){()->{xxxxxcyc.await();    }}

Semaphere:信号灯

Sempahere s= new Semaphere(3);for (int i=0;i<7;i++)new Thread(){()->{s.acquire();// 资源不够时会阻塞xxxxs.release();// 表示释放了资源}}
http://www.tj-hxxt.cn/news/76212.html

相关文章:

  • 网站建设中 模板百度竞价sem
  • 宁夏网站建设中安卓手机优化
  • 网站建设 成本建设营销网站
  • 湖南省政府网站湖南seo优化公司
  • 网站开发需要2个月吗百度收录网站入口
  • 做爰全过程网站免费的视频网络营销策略分析论文
  • 新闻网站建设合同百度热搜关键词
  • 鞍山网站建设联系方式深圳百度
  • 找网站建设公司网站搜索引擎优化技术
  • 网站怎么做才算精致优化营商环境心得体会
  • 东莞营销型网站建设找火速seo五大经验分享
  • 日本网站设计seo网站优化报价
  • dw网站制作手机软件下载app推广是做什么的
  • 沛县徐州网站开发旅游网站的网页设计
  • 东莞企业网站建设价格安康地seo
  • 什么是电子商务网站建设郑州做网站的大公司
  • 中山网站建设如何网络推广团队
  • 山东做网站找谁百度广告优化
  • 现在哪个招聘网站做的比较好北京公司排名seo
  • 没有备案的网站百度不收录今日热点新闻视频
  • 湘潭seo培训百度网站快速优化
  • wordpress导航主题haow成都网站改版优化
  • 没技术怎么做网站国外网站seo免费
  • 免费建站自己的网址哪里做网站便宜
  • 网站如何优化关键词网站推广网站
  • 车牌照损坏在网站做的能用吗网络营销课程有哪些
  • 西安淘宝网站建设公司排名品牌推广平台
  • 濮阳推广公司seo关键词排名优化教程
  • wordpress 识别pc手机seo薪酬
  • 南京网站推广哪家便宜今日国内新闻头条15条