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

专业做pc+手机网站电子商务网站建设的首要问题

专业做pc+手机网站,电子商务网站建设的首要问题,做的好的茶叶网站好,公共法律知识培训网站点击上方 “ 布衣码农 ” #xff0c;免费订阅~选择“ 设为星标 ”#xff0c;第一时间免费获得更新~「布衣码农」用不到却又不得不学习了解的底层方法1。Object中的wait、notify、notifyAll#xff0c;可以用于线程间的通信#xff0c;核心原理为借助于监视器的入口集与等… 点击上方 “ 布衣码农 ” 免费订阅~选择“ 设为星标 ”第一时间免费获得更新~「布衣码农」用不到却又不得不学习了解的底层方法1。Object中的wait、notify、notifyAll可以用于线程间的通信核心原理为借助于监视器的入口集与等待集逻辑。通过这三个方法完成线程在指定锁(监视器)上的等待与唤醒这三个方法是以锁(监视器)为中心的通信方法 。除了他们之外还有用于线程调度、控制的方法他们是sleep、yield、join方法他们也可以用于线程的协作他们是围绕着线程的调度而来的 。sleep方法有两个版本的sleep方法看得出来核心仍旧是native方法。非native方法只是进行了参数校验接着仍旧是调用的native方法这个情形与wait是类似的接下来仔细看下native版本的sleep在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。注意sleep不会释放锁不会释放锁不会释放锁可以理解为他进入监视器这个房间之后在这房间里面睡着了。与wait类似的是sleep也是可中断方法(从方法签名可以看得出来可能抛出InterruptedException)也就是说如果一个线程正在sleep如果另外的线程将他中断(调用interrupt方法)将会抛出异常并且中断状态将会擦除。所以对于sleep方法要么自己醒来要么被中断后也会醒来。对于sleep始终有一个超时时间的设置所以尽管他是在监视器内睡着了但是并不会导致死锁因为他终究是要醒来的。如下线程休眠500毫秒主线程50毫秒打印一次状态pssleep方法的调用结果为状态TIMED_WAITING借助于sleep方法可以模拟线程的顺序执行比如下面示例两个阶段第二个阶段将在第一个阶段执行之后才会执行package test1;import java.lang.Thread.State;public class T16 {public static void main(String[] args) { //模拟执行任务的第一个阶段的执行 Thread stepOne new Thread(() - { System.out.println(Thread.currentThread().getName() : 第一阶段任务开始执行); try { Thread.sleep(1000); System.out.println(Thread.currentThread().getName() : 第一阶段任务执行结束); } catch (InterruptedException e) { } }, firstStage); stepOne.start(); //模拟任务第二个阶段的执行 Thread stepTwo new Thread(() - { while (!State.TERMINATED.equals(stepOne.getState())) { try { Thread.sleep(100); System.out.println(Thread.currentThread().getName() : 我在等待第一阶段任务执行结束); } catch (InterruptedException e) { } } System.out.println(Thread.currentThread().getName() : 第二阶段任务执行结束); }, secondStage); stepTwo.start(); }}另外你应该已经注意到sleep方法都有static修饰既然是静态方法在Thread中的惯例就是针对于当前线程当前线程当前线程yield方法对于sleep或者wait方法他们都将进入特定的状态伴随着状态的切换也就意味着等待某些条件的发生才能够继续比如条件满足或者到时间等。但是yield方法不涉及这些事情他针对的是时间片的划分与调度所以对开发者来说只是临时让一下让一下他又不会死就只是再等等yield方法将会暂停当前正在执行的线程对象并执行其他线程他始终都是RUNNABLE状态不过要注意可以认为yield只是一种建议性的如果调用了yield方法对CPU时间片的分配进行了“礼让”他仍旧有可能继续获得时间片并且继续执行。所以一次调用yield 并不一定会代表肯定会发生什么。借助于while循环以及yield方法也能一定程度上达到线程排序等待的效果yield也是静态方法所以也是针对于当前线程当前线程当前线程。join方法三个版本的join方法方法的实现过程与wait也是非常类似下面两个版本的方法一个调用join(0),一个参数校验后调用join(millis)所以根本还是单参数版本的join方法在方法深入介绍前先看个例子一个线程循环5次每次sleep 1s主线程中打印信息从结果可以看到主线程总是在线程执行之后才会执行。也就是主线程在等待我们创建的这个线程结束结束了之后才会继续进行如果调整下顺序---start 与 join的先后顺序再次看下情况可以发现顺序没有保障了结论主线程main中调用启动线程(调用start)然后调用该线程的join方法可以达到主线程等待工作线程运行结束才执行的效果并且join要在start调用后如何做到的从上面源代码可以看得出来内部调用了wait方法所以也能明白为啥join也会抛出InterruptedException了吧主线程main中调用thread.join()方法join方法相当于join(0)也就是 while (isAlive()) { wait(0); }而这个wait(0)就相当于是this.wait(0)this就是我们自己创建的那个线程thread看看方法的签名是不是有一个synchronized。isAlive()也是this.isAlive()也就是如果当前线程alive(已经启动但是未终止)那么将持续等待等待的临界资源就是我们创建的这个线程对象本身。所以这两行代码的含义就是该线程是否还存活如果存活调用join的那个线程将会在这个对象上进行等待(进入该线程对象的等待集)也就是说调用一个线程的join方法就是在这个线程是等待这个线程对象就是我们的锁对象(不要疑惑Object都可以作为锁Thread实例对象怎么不可以)肯定大家很奇怪既然是等待wait又不会自己醒来那不是出问题了吗其实线程结束后会调用this.notifyAll所以主线程main会被唤醒如果传递的参数不为0将会走到下面的分支会wait指定时长与上面的逻辑一致只不过是有指定超时时长而已 long delay millis - now; if (delay 0) { break; } wait(delay); now System.currentTimeMillis() - base;手动版本的等待结束只是将join方法换成了同步代码块锁对象为那个线程的实例对象thread调用他的wait方法从结果上看效果一样(不过此处没有持续监测isAlive()所以一旦主线程醒来即使线程没有结束也会继续不能百分百确保main肯定等待线程结束)不过要注意注释中有说明自己不要使用Thread类的实例对象作为锁对象如果是现在这种场景使用join即可为什么从目前来看join方法就是以这个对象为锁如果你自己在使用又是wait又是notify(notifyAll)的万一出现什么隐匿的问题咋办所以join方法的原理就是将指定的Thread实例对象作为锁对象在其上进行同步只要那个线程还活着那么就会持续等待(或者有限时长)。线程终止之后会调用自身this.notifyAll以通知在其上等待的线程。简单说只要他活着大家就都等着 他死了会通知所以效果就是在哪里调用了谁的join哪里就要等待这个线程结束才能继续。为什么要在start之后如上面所示将join改造成同步代码块如下所示如果这段同步代码在start方法之前看下结果没有等待指定线程结束main主线程就结束了因为如果还没有调用start方法那么isAlive是false(已开始未结束)主线程根本就不会等待所以继续执行然后继续到下面的start然后主线程结束。所以为什么join方法一定要在start之前就是因为这个isAlive方法的校验你没有startisAlive就是false就不会同步等待所以必须要先start然后才能join小结对于join方法有两个关键调用的哪个对象的join在哪里调用的换一个说法join的效果是一个线程等待另一个线程(直到结束或者持续一段时间)才执行那么谁等待谁在哪个线程调用哪个线程就会等待调用的哪个Thread对象就会等待哪个线程结束状态图回顾在回顾下之前状态一文中的切换图又了解了这几个方法后应该对状态切换有了更全面的认识总结对于yield方法比较容易理解只是简单地对于CPU时间片的“礼让”除非循环yield否则一次yield可能下次该线程仍旧可能会抢占到CPU时间片可能方法调用和不调用没差别。sleep是静态方法针对当前线程进入休眠状态两个版本的sleep方法始终有时间参数所以必然会在指定的时间内苏醒他也不会释放锁当然sleep方法的调用不是必须在同步方法(同步代码块)内。join是实例方法表示等待谁是用于线程顺序的调度方法可以做到一个线程等待另外一个线程join有三个版本指定超时时间或者持续等待直到目标线程执行结束join也无需在同步方法(同步代码块)内。sleep和join都是可中断方法被其他线程中断时都会抛出InterruptedException异常并且会醒来join方法底层依赖wait我们对比下wait与sleep wait和sleep都会使线程进入阻塞状态都是可中断方法被中断后都会抛出异常wait是Object的方法sleep是Thread的方法wait必须在同步中执行sleep不需要(join底层依赖wait但是不需要在同步中因为join方法就是synchronized的)wait会释放锁sleep不会释放锁wait(无超时设置的版本)会持续阻塞必须等待唤醒而sleep必然有超时所以一定会自己醒来wait 实例方法(Object)在对象上调用表示在其上等待sleep静态方法当前线程  ··················END··················注非技术讲解配图均来源于网络期待分享如果对你有用可以点个 「在看」 或者分享到 「 朋友圈 」 哦你「在看」吗 ↓↓
http://wiki.neutronadmin.com/news/364933/

相关文章:

  • 软件网站开发团队名称手机怎么跳过国家禁止访问
  • 怎么看网站做没做备案自己搭建聊天软件
  • 什么网站会更有浏览量注册网站域名的入口
  • 曲沃网站建设wordpress 多站点配置
  • 海东地网站建设衡阳网站建设mdawl
  • 网站推广策略成功的案例青岛网站制作推广平台
  • jspajax网站开发典型实例青海响应式网站建设
  • 谷歌怎么把两个网站做反链取消wordpress邮箱认证
  • 做国际网站有用吗网站建设课程设计百度文库
  • 网站建设学费要多少企业系统申报
  • 网站建设准备资料福州百诚互联
  • 东莞网网站公司简介精准营销服务
  • 轻应用网站模板制作网站什么制作
  • 绿植租摆网站建设大连专业网站设计服务商
  • 贵金属如何用网站开发客户上市公司专利查询网站
  • 设计师 推荐 网站电子商务网站建设管理论文
  • 深圳企业网站设php网站开发案例教程
  • 宝塔面板加wordpress建站去成都旅游攻略及费用
  • 网站专题策划案例天津网站开发培训
  • 学网站建设软件开发长沙做企业网站推广的公司
  • 专做耐克阿迪鞋网站建设音乐网站
  • 教育类网站模板小学生班级优化大师
  • 个性化的个人网站简易网站优化要从哪些方面做
  • 免费建立教育网站惠州网站建设服务
  • 免费生成网站网址html5商城网页模板
  • 网站到期了网站充值怎么做分录
  • 章丘营销型网站建设wordpress home.php
  • wordpress文章列表不显示图片邢台网站优化公司
  • 网站备案网站directadmin网站储存目录
  • 潍坊建设厅网站自助友链平台