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

做面食的网站深圳网站建设-中国互联

做面食的网站,深圳网站建设-中国互联,怎样才能建立网站,新手练习做网站哪个网站比较合适多线程爬虫是一种同时运行多个线程来提高爬取速度的爬虫方式。通过将大量的工作分配给不同的线程,可以减少爬虫的运行时间,提高效率。不过需要注意的是,在爬取过程中需要合理的管理线程数,以避免对被爬取的网站造成过大的负荷。 …

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

一、线程基础

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.yayakq.cn/news/358233/

相关文章:

  • 安徽安搜做的网站怎么样任何东西都能搜出来的软件
  • 鲜花网站素材免费网站建设凡科
  • 门户网站开发万网和慧聪网
  • 怎么做网站在线玩游戏建站平台费用
  • 建设银行考试报名网站怎么建个免费英文网站
  • 电商网站建设任务分解结构网络营销典型推广案例
  • 做房地产网站广告销售个人网站转为企业网站
  • 西安网站建设求职简历网站购买广告位
  • 网站建设实验步骤百度首页网站的设计
  • 安徽住房和建设网站贵阳网站制作费用
  • 上海建设银行招聘网站wordpress 旅行社
  • 那个网站可以做链接网站建设推广方案模版
  • 网站制作网站维护牌子网排行榜
  • 做网站要什么语言建设久久建筑网站
  • 中国建设银行英语网站首页wordpress模板查询
  • 网站代备案流程图基础微网站开发代理商
  • 宁波做企业网站公司宁波seo排名方案优化
  • 五合一免费建站ai生成建筑网站
  • 上海人才招聘哪个网站好网站 多个ip 备案
  • 布吉网站建设多少钱美食网站建设实施方案
  • 广州市网站建设 骏域腾冲住房和城乡建设局网站
  • 厦门网站制作网站建设收费实物黄金哪个网站做的好
  • 中山最好的网站建设宁波网络推广方案公司推荐
  • 汕头企业网站建设公司中国建设银行网站上不去
  • 网站建设与管理上海交通大学h5模版网站
  • 网站建设及规划建筑工程劳务信息平台
  • 做外贸女装有哪些网站有哪些wordpress 制作专题
  • 如何制作单页网站360网页游戏大厅
  • 新钥匙网站建设三亚新闻发布会直播第十五场
  • 网站设计欣赏心得体会当前主流的网络营销方式