刚开始学多线程编程,课上也没认真听,课下去网上找了PPT,又认真的学了一遍。

问题:

  1. 编写龟兔赛跑多线程程序,设赛跑长度为100米,每跑完10米输出一次结果。
  2. 采用实现Runnable接口的方法编写龟兔赛跑多线程程序,功能与1完全一样。
  3. 改进1的龟兔赛跑程序,通过改变优先级,并减掉休眠时间,使得乌龟以迅雷不及掩耳的速度跑完100米。
  4. 编写兔子休眠后被乌龟中断(吵醒)的多线程程序。

问题①

Animal 类:

public class Animal extends Thread{public Animal(String name){super(name);}public void run(){for(int i=0;i<=100;i+=10){if(this.getName().equals("乌龟"))System.out.println("乌龟跑了 "+ i + " 米");elseSystem.out.println("兔子跑了 "+ i + " 米");}try{Thread.sleep((long)(Math.random()*1000));}catch(InterruptedException e){e.printStackTrace();}}
}

测试类:

public class Quetion1 {public static void main(String[] args) {Animal rabbit = new Animal("兔子");Animal tortoise = new Animal("乌龟");rabbit.start();tortoise.start();}
}

问题②

Animal 类:

public class Animal implements Runnable{private String name;public Animal(String name){this.name=name;}public String getName(){return this.name;}public void run(){for(int i=0;i<=100;i+=10){if(this.getName().equals("乌龟"))System.out.println("乌龟跑了 "+ i + " 米");elseSystem.out.println("兔子跑了 "+ i + " 米");}try{Thread.sleep((long)(Math.random()*1000));}catch(InterruptedException e){e.printStackTrace();}}
}

测试类:

public class Quetion2 {public static void main(String[] args) {Animal rabbit = new Animal("兔子");Animal tortoise = new Animal("乌龟");Thread t1 = new Thread(rabbit);Thread t2 = new Thread(tortoise);t1.start();t2.start();}
}

问题③

Animal 类:

public class Animal extends Thread{public Animal(String name) {super(name);}public void run() {for(int i=0;i<=100;i+=10) {if(this.getName().equals("乌龟"))System.out.println("乌龟跑了 " + i + "米");elseSystem.out.println("兔子跑了 " + i + "米");}}
}

测试类:

public class Question3 {public static void main(String[] args) {Animal rabbit = new Animal("兔子");Animal tortoise = new Animal("乌龟");rabbit.setPriority(1);tortoise.setPriority(10);rabbit.start();tortoise.start();}}

问题④

Animal 类:

public class Animal implements Runnable{Thread rabbit,tortoise;public Animal() {rabbit = new Thread(this,"兔子");tortoise = new Thread(this,"乌龟");}public void run() {if(Thread.currentThread() == tortoise) {System.out.println("此时兔子在休眠,被乌龟吵醒。乌龟说:该你去跑步了!");rabbit.interrupt();System.out.println("乌龟继续跑步...");}else {try{System.out.println("兔子正在休眠...乌龟正在跑步");rabbit.sleep(1000*60);}catch(InterruptedException e) {System.out.println("兔子被叫醒");System.out.println("兔子开始跑步");}}}
}

测试类:

public class Question4 {public static void main(String[] args) {Animal animal = new Animal();System.out.println("开始状态:");System.out.println("兔子的线程状态: " + animal.rabbit.getState());System.out.println("乌龟的线程状态: " + animal.tortoise.getState());System.out.println("比赛开始:");animal.rabbit.start();animal.tortoise.start();System.out.println("兔子的线程状态: " + animal.rabbit.getState());System.out.println("乌龟的线程状态: " + animal.tortoise.getState());System.out.println("当前活动总线程数: " + Thread.activeCount());/*这里输出总线程数位3,因为除了乌龟和兔子还有一个主线程*/}}

java多线程编程--模拟龟兔赛跑过程相关推荐

  1. java编写的王八程序_利用JAVA多线程技术模拟龟兔赛跑.doc

    利用JAVA多线程技术模拟龟兔赛跑 摘要:该文介绍了利用JAVA语言的多线程技术,对"龟兔赛跑"寓言故事的模拟.从模拟程序的具体设计思路,到详细的实现过程,将技术的应用融入到一个有 ...

  2. java多线程编程从入门到卓越(超详细总结)

    导读:java多线程编程不太熟?或是听说过?或是想复习一下?找不到好的文章?别担心我给你们又安利一波,文章内容很全,并且考虑到很多开发中遇到的问题和解决方案.循环渐进,通俗易懂,文章较长,建议收藏再看 ...

  3. Java 多线程编程核心技术

    课程介绍 多线程编程在最大限度利用计算资源.提高软件服务质量方面扮演着至关重要的角色,而掌握多线程编程也成为了广大开发人员所必须要具备的技能. 本课程以基本概念.原理方法为主线,每篇文章结合大量演示实 ...

  4. java多线程编程01---------基本概念

    一. java多线程编程基本概念--------基本概念 java多线程可以说是java基础中相对较难的部分,尤其是对于小白,次一系列文章的将会对多线程编程及其原理进行介绍,希望对正在多线程中碰壁的小 ...

  5. java超线程_超线程多核心下Java多线程编程技术分析

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述超线程多核心下Java多线程编程技术分析,更多Java专业知识,广州疯狂 ...

  6. Java多线程编程实战指南+设计模式篇pdf

    下载地址:网盘下载 随着CPU 多核时代的到来,多线程编程在充分利用计算资源.提高软件服务质量方面扮演了越来越重要的角色.而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案.然 ...

  7. Java多线程编程那些事:volatile解惑--转

    http://www.infoq.com/cn/articles/java-multi-thread-volatile/ 1. 前言 volatile关键字可能是Java开发人员"熟悉而又陌 ...

  8. Java多线程编程模式实战指南(二):Immutable Object模式--转载

    本文由本人首次发布在infoq中文站上:http://www.infoq.com/cn/articles/java-multithreaded-programming-mode-immutable-o ...

  9. Java多线程编程中Future模式的详解

    转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...

  10. Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信

    前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

最新文章

  1. manjaro升级的一些问题
  2. mysql慢sql增加读写分离_MySQL-Proxy实现MySQL读写分离提高并发负载
  3. Ajax里的onreadystatechange的作用
  4. html在百度地图显示位置,在百度地图显示当前位置.html
  5. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
  6. (转)MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验...
  7. HashMap两种遍历数据的方式
  8. 11个Javascript树形菜单
  9. 什么是python自动化脚本_python自动化框架脚本
  10. Protocol类型限制
  11. [WebKit] JavaScriptCore解析--高级篇(一) SSA (static single assignment)
  12. 蓝桥杯官网 试题 PREV-274 历届真题 分果果【第十二届】【省赛】【研究生组】【C++】【Java】两种解法
  13. BatchNorm和LayerNorm——通俗易懂的理解
  14. 扫呗、通联微信后台配置支付授权目录流程
  15. 树莓派机器视觉环境搭建
  16. 好雨云使用OKRs做绩效管理
  17. Android 设置锁屏时间,屏幕常亮效果
  18. 男人最渴望拥有的十类妻子
  19. GeneXus学习(三)数据库操作【可视化低代码的迁移项目】
  20. 智能卡应用的开发流程

热门文章

  1. 解决ios微信小程序弹框点击穿透问题
  2. 嵌入式Linux项目开发的几个步骤
  3. Python爬取中国天气网天气数据
  4. 代码质量(权威精选植根于开发实践的最佳读物)
  5. 达梦数据库DCA培训总结
  6. navicat for mysql 10.0.11简体中文破解版 绿色版
  7. Typora下载链接
  8. js 图表处理之Echar
  9. 计算机毕业设计django基于python智能在线考试阅卷系统(源码+系统+mysql数据库+Lw文档)
  10. Proteus 里面library文件夹找不到,怎么找到library文件夹。