第1关:顺序输出
任务描述
本关任务:利用多线程相关知识控制三个线程,依照先后顺序顺序输出。
相关知识(略)
编程要求
请仔细阅读右侧代码,在 Begin-End 区域内进行代码补充,使线程依照先后顺序依次输出JavaThread+线程名。
提示:我们知道线程的执行结果是随机的,什么时候执行线程是看哪一个线程抢占到了CPU的资源,现在请你利用所学知识使多个线程开启之后依照先后顺序执行。
可以参考的实训有:Java高级特性 - 多线程基础(2)常用函数
测试说明
测试输入:无;
预期输出:
JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC
JavaThreadAA
JavaThreadBB
JavaThreadCC
开始你的任务吧,祝你成功!
参考代码:

package step1;
public class Task {public static void main(String[] args) throws Exception {/********* Begin *********///在这里创建线程, 开启线程Object a = new Object();Object b = new Object();Object c = new Object();MyThread ta = new MyThread("A",c,a);MyThread tb = new MyThread("B",a,b);MyThread tc = new MyThread("C",b,c);ta.start();ta.sleep(100);tb.start();tb.sleep(100);tc.start();tc.sleep(100);    /********* End *********/}
}
class MyThread extends Thread {/********* Begin *********/private String threadName;private Object prev;private Object self;public MyThread(String name,Object prev,Object self){this.threadName = name;this.prev = prev;this.self = self;}public void run() {int count = 5;while(count>0){synchronized(prev){synchronized(self){System.out.println("Java Thread"+this.threadName+this.threadName);count--;self.notify();}try {prev.wait();} catch (InterruptedException e) {e.printStackTrace();}}}System.exit(0);}/********* End *********/
}

第2关:售票窗口
任务描述
本关任务:利用多线程技术,编写一个卖票的小程序,
相关知识(略)
编程要求
目前有三个窗口同时出售20张票,需要你在右侧代码中的 Begin-End 区域编写代码实现多个窗口售票的功能,具体要求如下:
票数要使用同一个静态值;
为保证不会出现卖出同一张票,使用java多线程同步锁(synchronized或lock)。
解题思路:
创建一个站台类Station,继承Thread,重写run方法,在run方法里面执行售票操作(即如果票没卖完就一直卖)!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完!
相关知识可以参考实训:Java高级特性 - 多线程基础(3)线程同步
测试说明
本关执行代码已经提前写好如下,不需要你重新编写运行代码:

public static void main(String[] args) {//实例化站台对象,并为每一个站台取名字Station station1=new Station();Station station2=new Station();Station station3=new Station();// 让每一个站台对象各自开始工作station1.start();station2.start();station3.start();
}

测试输入:无;
预期输出:
卖出了第20张票
卖出了第19张票
卖出了第18张票
卖出了第17张票
卖出了第16张票
卖出了第15张票
卖出了第14张票
卖出了第13张票
卖出了第12张票
卖出了第11张票
卖出了第10张票
卖出了第9张票
卖出了第8张票
卖出了第7张票
卖出了第6张票
卖出了第5张票
卖出了第4张票
卖出了第3张票
卖出了第2张票
卖出了第1张票
票卖完了
开始你的任务吧,祝你成功!
参考代码:

package step2;
/********* Begin *********/
//定义站台类,实现卖票的功能。
public class Station extends Thread{     static int tick = 20; // 为了保持票数的一致,票数要静态static Object ob = new Object(); // 创建一个静态钥匙 值是任意的public void ticket() {System.out.println( "卖出了第" + tick + "张票");tick--;}public void run() {while (tick > 0) {synchronized (ob) {if (tick > 0) {ticket();} }if(tick == 0){System.out.println("票卖完了");}try {Thread.sleep(100);} catch (Exception e) {}}}
}
/********* End *********/

Java高级特性 - 多线程练习题相关推荐

  1. 头歌Educoder——Java高级特性 - 多线程练习题

    文章目录 第1关:顺序输出 任务描述 相关知识(略) 编程要求 测试说明 代码示例 第2关:售票窗口 任务描述 相关知识(略) 编程要求 测试说明 代码示例 Station.java Task.jav ...

  2. 【头歌实训】Java高级特性 - 多线程基础(1)使用线程,使用 Callable 和 Future 创建线程

    任务描述 本关任务:通过 Callable 和 Future 来创建线程. 相关知识 从Java1.5版本开始,就提供了 Callable 和 Future 来创建线程,这种方式也是在Java程序员面 ...

  3. EduCoder Java高级特性 - 多线程基础(1)使用线程

    第1关:创建线程 任务描述 本关任务:创建一个Java线程执行特定任务. 编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: 使用继承Threa ...

  4. Java高级特性增强-多线程

    请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...

  5. 课工场-JAVA高级特性编程及实战第1章练习题3答案参考

    JAVA高级特性编程及实战第1章练习题3答案参考~ 本人菜鸟,一章章地学, 本想在网上搜一下然后对下答案的, 没找着~ 本着虔诚的心,把自己做的贴出来~ 运行结果是了出来了,过程不知道是否正确 欢迎大 ...

  6. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

  7. Java学习之java高级特性

    From:https://blog.csdn.net/w252064/article/details/79923999 [Java高级特性详解]:https://blog.csdn.net/qq_37 ...

  8. Java高级特性编程及事件_java高级特性是什么

    详细内容 java高级特性主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术. 集合框架 是一套性能优良.使用方便的接口和类(位于java.util包中)解决数组在存储上 ...

  9. (小白学JAVA之)Java高级特性知识点梳理

    Java高级特性知识点梳理 集合框架和泛型 List接口 ArrayList ArrayList类的常用方法 具体实现步骤 LinkedList LinkedList类的常用方法 具体实现步骤 Set ...

最新文章

  1. 推荐一个 Java 接口快速开发框架
  2. 编译cscope-15.8a遇到的问题与解决方案
  3. java+arrayblockquene_java集合(五)Queue集合之ArrayBlockingQueue 详解
  4. LeetCode28 对称的二叉树-简单
  5. web操作系统开发的_哪种操作系统更适合Web开发
  6. Windows下C语言连接Oracle数据库
  7. android访问百度新闻,百度新闻(com.baidu.news) - 8.3.6.0 - 应用 - 酷安
  8. 尽管速度如此之慢,为什么Python如此受欢迎?
  9. [Ubuntu] 文件权限
  10. 在Linux环境下安装和配置phpmyadmin
  11. java内部类_Java内部类
  12. RPM打包技术与典型SPEC文件分析(转)
  13. 软件项目工作量评估方法简述之功能点方法(FPA)
  14. flash 图表(XML动态获取数据)
  15. spring aop统一进行日常及异常的处理
  16. Nylg541 最强DE 战斗力
  17. 输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
  18. Java编程之实现数字化的连连看
  19. 二进制数转换十进制数(十进制转二进制)
  20. 不限专业的计算机证书,不限专业可以考的证书有哪些

热门文章

  1. 如何官网下载Eclipse历史版本
  2. 统计大写字符、小写字符、数字等个数
  3. 什么是经验--从程序员角度的思考
  4. 5v2.1a给5v2a充电行吗
  5. 银保监机构保险许可证数据(2007-2022年)
  6. 淘宝网触屏版 - 学习笔记(1 - 关于meta)
  7. WPS 关闭自动更新和热点新闻推荐
  8. 数据标注工具下载中遇到的各种问题
  9. android重启自身应用APP
  10. VSCode_快捷键