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

旅游网站开发的作用化妆品行业网站建设方案

旅游网站开发的作用,化妆品行业网站建设方案,wordpress由于插件无法登录,可以兼职做翻译的网站或app最近面试遇到的一道题#xff0c;需要三个线程交替打印0-100#xff0c;当时对多线程并不是很熟悉因此没怎么写出来#xff0c;网上搜了之后得到现 synchronized wait/notifyAll 实现思路#xff1a;判断当前打印数字和线程数的取余#xff0c;不等于当前线程则处于等待…最近面试遇到的一道题需要三个线程交替打印0-100当时对多线程并不是很熟悉因此没怎么写出来网上搜了之后得到现 synchronized wait/notifyAll 实现思路判断当前打印数字和线程数的取余不等于当前线程则处于等待状态。循环结束唤醒所有等待线程。 public class PrintExample {//创建一个公共锁对象private static final Object Lock new Object();//执行线程数private static final int THREAD_COUNT 3;//打印数字的起始点private static volatile int START 0;//打印数字的结束点private static final int END 100;private static class Print implements Runnable{private final int index;public Print(int index){this.index index;}Overridepublic void run() {while(STARTEND){synchronized (Lock){//START和线程数进行取余如果不等于当前线程的则等待while(START % THREAD_COUNT ! index){try{Lock.wait();}catch (Exception e){e.printStackTrace();}}//否则进行输出if(STARTEND){System.out.println(Thread (index1) ,打印结果 START);}START;//唤醒等待线程Lock.notifyAll();}}}public static void main(String[] args) {for(int i 0; i THREAD_COUNT; i){new Thread(new Print(i)).start();}}} }ReetrantLock await/signalAll 实现思路实现方式和synchronized wait/notifyAll儿乎完全一样。我们只需要4步 1.synchronized 替换为ReentrantLock 2.根据锁对象创建一个Condition对象 3.wait替换成await 4.notifyAll 替换为 signalAll   public class PrintExample {//创建一个公共锁对象private static final ReentrantLock Lock new ReentrantLock();//根据锁对象创建一个Condition对象private static final Condition CONDITION Lock.newCondition();//执行线程数private static final int THREAD_COUNT 3;//打印数字的起始点private static volatile int START 0;//打印数字的结束点private static final int END 100;private static class Print implements Runnable{private final int index;public Print(int index){this.index index;}Overridepublic void run() {while(STARTEND){Lock.lock();try {//START和线程数进行取余如果不等于当前线程的则等待while(START % THREAD_COUNT ! index){try{CONDITION.await();}catch (Exception e){e.printStackTrace();}}//否则进行输出if(STARTEND){System.out.println(Thread (index1) ,打印结果 START);}START;//唤醒等待线程CONDITION.signalAll();}catch (Exception e){e.printStackTrace();}finally {Lock.unlock();}}}public static void main(String[] args) {for(int i 0; i THREAD_COUNT; i){new Thread(new Print(i)).start();}}} }ReetrantLock await/signal 因为Condition相对wait/notify方式可以唤醒指定线程。那我们就完全不用每次都唤醒全部线程仅需要唤醒下一次需要执行的线程就可以了。 相比较 ReentrantLock await/signalAll 改进方法 1.去除公共的Condition对象替换为ListCondition conditions 2.调用下一个线程的Condition对象的signal方法唤醒下一个线程 public class PrintExample {//创建一个公共锁对象private static final ReentrantLock Lock new ReentrantLock();//根据锁对象创建一个Condition对象//private static final Condition CONDITION Lock.newCondition();//执行线程数private static final int THREAD_COUNT 3;//打印数字的起始点private static volatile int START 0;//打印数字的结束点private static final int END 100;private static class Print implements Runnable{private final int index;private final ListCondition conditions;public Print(int index,ListCondition conditions){this.index index;this.conditions conditions;}//只唤醒下一个线程private void signalNext(){int nextIndex (index 1) % THREAD_COUNT;conditions.get(nextIndex).signal();}Overridepublic void run() {while(STARTEND){Lock.lock();try {//START和线程数进行取余如果不等于当前线程的则等待while(START % THREAD_COUNT ! index){try{conditions.get(index).await();}catch (Exception e){e.printStackTrace();}}//否则进行输出if(STARTEND){System.out.println(Thread (index1) ,打印结果 START);}START;//唤醒等待线程signalNext();}catch (Exception e){e.printStackTrace();}finally {Lock.unlock();}}}public static void main(String[] args) {ListCondition conditionList new ArrayList();conditionList.add(Lock.newCondition());conditionList.add(Lock.newCondition());conditionList.add(Lock.newCondition());for(int i 0; i THREAD_COUNT; i){new Thread(new Print(i,conditionList)).start();}}} }此处使用 ListCondition conditions让每个线程都拥有属于自己的condition这样可以单独唤醒和等待。 Condition是什么 概念 condition可以理解为条件队列。当一个线程在调用了其await方法以后直到线程等待的某个条件为真的时候才会被唤醒。Condition必须要配合锁一起使用因为对共享状态变量的访问发生在多线程环境下。一个Condition的实例必须与一个Lock绑定因此Condition一般都是作为Lock的内部实现 方法 Condition依赖于Lock接口 方法解释lock.newCondition()生成一个Conditionawait()对应Object的wait()使线程等待signal()对应Object的notify()唤醒线程 注意调用Condition的await()和signal()方法都必须在lock.lock()和lock.unlock()之间使用 在生产者和消费者中Condition的执行方式 当在线程Consumer中调用await方法后线程Consumer将释放锁并且将自己沉睡等待唤醒。这时等到线程Producer获取到锁后开始执行任务完毕后调用Condition的signalall方法唤醒线程Consumer线程Consumer恢复执行。 以上说明Condition是一个多线程间协调通信的工具类使得某个或某些线程一起等待某个条件Condition,只有当该条件具备( signal 或者 signalAll方法被带调用)时 这些等待线程才会被唤醒从而重新争夺锁
http://www.hkea.cn/news/14410627/

相关文章:

  • 北京做公司网站公司做铝材哪些网站招聘
  • cms建站免费做的网站怎么设置域名
  • 网站建站前seo注意手机网站刷排名
  • 网站微信开发页面优化诊断
  • 湖州建设局新网站建设执业资格注册中心网站
  • 信阳网站开发公司深圳网站优化
  • 安康网站建设wordpress菠菜插件
  • 筑巢网站上海房产网二手房出售信息
  • 沈阳做网站黑酷科技国外文件传输网站
  • 导购网站制作房屋设计软件app自己设计画图
  • 网站建设与网站设计哪个好学做电影网站怎么样
  • 额敏网站建设wordpress媒体库整理
  • 网站图片设置链接wordpress如何加链接
  • 营销型网站方案pptwordpress字怎么变大
  • 如何做网站泛目录解析中国最大的软件开发公司
  • 关于网站开发费用的入账怎么理解搜索引擎优化
  • 企业网站cms系统论文东莞公司网络营销公司
  • 手机微信客户端网站建设共创福州网站建设
  • 宝安专业网站设计公司qq空间做宣传网站
  • 青岛城阳网站设计学python网站开发
  • 淘客网站后台怎么做虚拟主机空间 配置 网站
  • 赣州市规划建设局网站改门户网站建设教程
  • 怎么搭建网站平台ui设计一个页面多少钱
  • 我网站关键词太多广告推广语
  • 做网站图片ps用哪种字体国外在线设计平台
  • 自己网站建设问题wordpress如何添加二级菜单
  • 桐梓网站开发网站建设开票内容
  • 怎么查看一个网站是谁做的建筑设计图片
  • 哪里有卖自己做的网站怎样做自己的销售网站
  • 上海网站建设百度推广公司WordPress公众号扫码登录