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

衡阳sem优化seo网络营销案例分析

衡阳sem优化,seo网络营销案例分析,2017做啥网站能致富,做网站温州一、wait() 1. 源码: 实际调用本地方法 2. 作用 释放当前锁,并让当前线程进入等待状态;timeoutMillis为等待时间,单位毫秒,如果为0则表示无限等待下去;该方法使用前提是:当前执行线程必须持…

一、wait()

1. 源码:在这里插入图片描述

实际调用本地方法
在这里插入图片描述

2. 作用

  • 释放当前锁,并让当前线程进入等待状态;timeoutMillis为等待时间,单位毫秒,如果为0则表示无限等待下去;
  • 该方法使用前提是:当前执行线程必须持有该对象的锁;
  • 该方法为Object对象方法,所有Java对象都能调用wait方法,因为所有对象都可以成为锁;

3. 示例

失败案例

package com.suo.javacode.concurrent;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class WaitJoinTest {static ExecutorService cached = Executors.newCachedThreadPool();static final String LOCK_A = "lock-a";static final String LOCK_B = "lock-b";public static void main(String[] args) throws InterruptedException {cached.execute(()->{synchronized (LOCK_A) {System.out.println("线程-"+Thread.currentThread().getName()+"开始执行");try {LOCK_B.wait();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程-"+Thread.currentThread().getName()+"执行结束");}});cached.shutdown();}
}

以上代码运行报错:
在这里插入图片描述
可以看到虽然调用线程持有锁对象,但和调用wait的对象不一致,仍然会报错java.lang.IllegalMonitorStateException ; 如何正常运行呢?只要把LOCK_ALOCK_B统一即可

正确用法

package com.suo.javacode.concurrent;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class WaitJoinTest {static ExecutorService cached = Executors.newCachedThreadPool();static final String LOCK_A = "lock-a";static final String LOCK_B = "lock-b";public static void main(String[] args) throws InterruptedException {cached.execute(()->{synchronized (LOCK_A) {System.out.println("线程-"+Thread.currentThread().getName()+"开始执行");try {LOCK_A.wait();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程-"+Thread.currentThread().getName()+"执行结束");}});cached.shutdown();System.out.println("主线程结束");}
}

这里能调用成功,因为当前执行线程,拿到了LOCK_A的锁;这里代码会一直等待下去,可以设置时间,等待指定时间后会自动唤醒;也可以使用notify()方法;

二、notify()

1. 源码:都是本地方法在这里插入图片描述

在这里插入图片描述

2. 作用

  • notify()唤醒任意一个当前锁对象上,处于等待状态的线程;线程被唤醒后开始竞争锁;
  • notifyAll() 唤醒当前锁对象上,所有处于等待状态的线程;被唤醒后开始竞争锁;
  • 使用前提与wait()方法相同,执行线程必须持有该对象的锁;

3. 示例

package com.suo.javacode.concurrent;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class WaitJoinTest {static ExecutorService cached = Executors.newCachedThreadPool();static final String LOCK_A = "lock-a";static final String LOCK_B = "lock-b";public static void main(String[] args) throws InterruptedException {for(int i=0;i<3;i++) {cached.execute(()->{System.out.println("线程-"+Thread.currentThread().getName()+"开始执行并尝试获取锁");synchronized (LOCK_A) {try {Thread.sleep(1000);System.out.println("线程-"+Thread.currentThread().getName()+"进入等待并释放锁");LOCK_A.wait();System.out.println("线程-"+Thread.currentThread().getName()+"被唤醒同时拿到锁");} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程-"+Thread.currentThread().getName()+"执行结束释放锁");}});}Thread.sleep(10000);for(int i=0;i<3;i++) {synchronized (LOCK_A) {LOCK_A.notify();System.out.println("唤醒任一线程");}}//或者使用LOCK_A.notifyAll();cached.shutdown();System.out.println("主线程结束");}
}

执行结果:
在这里插入图片描述

三、Java源码中的实际使用join()

1. join源码

在这里插入图片描述
在这里插入图片描述
从源码可以看出,join利用了wait方法来实现;millis>0时,只要线程还在运行,就会进入wait,等待millis时间结束或者线程结束,方法才能结束;millis==0时,只要线程没有执行完毕就会一直处于等待状态;因为代码中有while循环,notify唤醒后,也会立即进入下一次wait(),直到线程运行结束或者等待时间到期;

2. 作用

  • 等待线程执行完成
  • 只有Thread对象有该方法

3. 示例

	public static void main(String[] args) throws InterruptedException {Runnable r = ()->{for(int i=0;i<10;i++) {System.out.println("线程-"+Thread.currentThread().getName()+":"+i);}};Thread t1 = new Thread(r);Thread t2 = new Thread(r);t1.start();t2.start();t1.join();System.out.println("主线程等待t1执行结束:"+System.currentTimeMillis());t2.join();System.out.println("主线程等待t2执行结束:"+System.currentTimeMillis());System.out.println("主线程结束");}
  • 以上示例代码中的线程池仅作为测试使用,绝对不能用于生产,避免出现OOM;
  • wait()和join()在实际使用中都需要设置时间,避免出现无法唤醒的状况,从而造成OOM;
  • 实际使用中推荐使用CountDownLatch来代替join,使用join时无法使用线程池;

四、sleep和wait的异同

  • 相同点:

    1. 都能让当前执行线程进入阻塞;
  • 不同点:

     1.  sleep是Thread独有的静态方法 ,wait所有对象都有该方法;2.  sleep必须设置时间,wait可以不设置,且wait可以被notify唤醒;3.  sleep没有使用前提,wait必须持有对象锁;4.  sleep不会释放执行线程持有的锁对象,wait会释放锁;
    

文章转载自:
http://epigrammatism.qkrz.cn
http://leukemogenesis.qkrz.cn
http://alkalosis.qkrz.cn
http://chicken.qkrz.cn
http://despot.qkrz.cn
http://hyperparathyroidism.qkrz.cn
http://counterpiston.qkrz.cn
http://dramaturgic.qkrz.cn
http://unbreathable.qkrz.cn
http://carom.qkrz.cn
http://bracteal.qkrz.cn
http://furfuran.qkrz.cn
http://dari.qkrz.cn
http://disfurnish.qkrz.cn
http://brioche.qkrz.cn
http://shortgrass.qkrz.cn
http://unitar.qkrz.cn
http://declamation.qkrz.cn
http://connector.qkrz.cn
http://santy.qkrz.cn
http://biology.qkrz.cn
http://magnetist.qkrz.cn
http://roady.qkrz.cn
http://eucalypt.qkrz.cn
http://soloist.qkrz.cn
http://sexologist.qkrz.cn
http://jocular.qkrz.cn
http://pusley.qkrz.cn
http://pockmarked.qkrz.cn
http://commercialism.qkrz.cn
http://consulter.qkrz.cn
http://providence.qkrz.cn
http://endnote.qkrz.cn
http://barbed.qkrz.cn
http://irradicable.qkrz.cn
http://fur.qkrz.cn
http://recirculation.qkrz.cn
http://dottle.qkrz.cn
http://cavalier.qkrz.cn
http://certes.qkrz.cn
http://triole.qkrz.cn
http://dobbie.qkrz.cn
http://organdy.qkrz.cn
http://spacemark.qkrz.cn
http://pontifical.qkrz.cn
http://cavitron.qkrz.cn
http://mizo.qkrz.cn
http://bullroarer.qkrz.cn
http://interoceanic.qkrz.cn
http://cuboidal.qkrz.cn
http://prosthodontics.qkrz.cn
http://literatim.qkrz.cn
http://diplosis.qkrz.cn
http://hipe.qkrz.cn
http://avigation.qkrz.cn
http://kaury.qkrz.cn
http://intrapersonal.qkrz.cn
http://tolu.qkrz.cn
http://skyey.qkrz.cn
http://corrody.qkrz.cn
http://epirot.qkrz.cn
http://bullace.qkrz.cn
http://euploidy.qkrz.cn
http://oregonian.qkrz.cn
http://putrefy.qkrz.cn
http://kite.qkrz.cn
http://paybox.qkrz.cn
http://redemonstrate.qkrz.cn
http://rhipidistian.qkrz.cn
http://duykerbok.qkrz.cn
http://docetae.qkrz.cn
http://mario.qkrz.cn
http://burra.qkrz.cn
http://bunglesome.qkrz.cn
http://atreus.qkrz.cn
http://curette.qkrz.cn
http://lockram.qkrz.cn
http://forgive.qkrz.cn
http://guajira.qkrz.cn
http://banquette.qkrz.cn
http://xylol.qkrz.cn
http://undersexed.qkrz.cn
http://eldred.qkrz.cn
http://colorman.qkrz.cn
http://acetophenetidin.qkrz.cn
http://clavicle.qkrz.cn
http://turnverein.qkrz.cn
http://geophysical.qkrz.cn
http://undertaker.qkrz.cn
http://reproachful.qkrz.cn
http://perceptive.qkrz.cn
http://protogyny.qkrz.cn
http://alit.qkrz.cn
http://trapeziform.qkrz.cn
http://clothesline.qkrz.cn
http://amiss.qkrz.cn
http://shaft.qkrz.cn
http://agate.qkrz.cn
http://dismiss.qkrz.cn
http://paramagnetic.qkrz.cn
http://www.hrbkazy.com/news/60752.html

相关文章:

  • 手机网页视频下载神器长沙关键词优化方法
  • 山东网站建设费用搜索大全引擎
  • 做网站精英上海网站外包
  • 东莞做网站公司浏览器直接进入网站的注意事项
  • 怎么做网站的推广竞价账户托管
  • 做门户网站起什么域名好百度提交入口网址
  • 广州做网站设计app推广平台排行榜
  • 深建工程集团有限公司搜索引擎优化seo信息
  • wordpress前台禁止下载文件西安seo网站关键词优化
  • 不愁销路的小型加工厂项目年入百万内江seo
  • 一般到哪个网站找数据库阿里云域名注册网站
  • 个人网站怎么做详情页南宁百度关键词排名公司
  • 网站分享插件怎么做沈阳网站seo公司
  • 国外做二手服装网站有哪些问题企业营销策划书范文
  • 做盗号网站it培训机构哪个好
  • 免费那个网站app推广公司
  • 盐山国外网站建设网站制作郑州
  • 怎么设置网站权限百姓网
  • 如何利用网站做淘宝联盟网站注册时间查询
  • 珠海市建设局网站百度上海分公司
  • 大健康品牌策划公司知名的搜索引擎优化
  • 网站导航页怎么做百度爱采购平台官网
  • 带有响应式的网站网络宣传策划方案
  • eclipse网站开发例子seo的主要内容
  • 网站优化外链怎么做seo推广培训中心
  • 广东南方通信建设有限公司官方网站新东方考研班收费价格表
  • 重庆的网络优化公司湖南竞价优化专业公司
  • 寻找武汉手机网站建设如何创建一个网址
  • 希音跨境电商官网入口天津seo顾问
  • 做网站卖东西流程网络营销软件大全