实验报告:

实验任务详情:

完成火车站售票程序的模拟。

要求:

(1)总票数1000张;

(2)10个窗口同时开始卖票;

(3)卖票过程延时1秒钟;

(4)不能出现一票多卖或卖出负数号票的情况。

实验代码:

package Java11;
class MyThread implements Runnable{
private int ticket = 1000; public void run() {
for(int i = 0; i < 1000; i++) {
this.sale();
if(i == Math.sqrt(i) * Math.sqrt(i)) {
Thread.currentThread().yield();
}
}
} public synchronized void sale() {
if(ticket > 0) {
try {
Thread.currentThread().sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖票:ticket="+ticket--);
}
}
}
package Java11; public class 测试类 { public static void main (String args[]) {
MyThread my = new MyThread();
Thread my1 = new Thread(my);
my1.setName("窗口1"); Thread my2 = new Thread(my);
my2.setName("窗口2"); Thread my3 = new Thread(my);
my3.setName("窗口3"); Thread my4 = new Thread(my);
my4.setName("窗口4"); Thread my5 = new Thread(my);
my5.setName("窗口5"); Thread my6 = new Thread(my);
my6.setName("窗口6"); Thread my7 = new Thread(my);
my7.setName("窗口7"); Thread my8 = new Thread(my);
my8.setName("窗口8"); Thread my9 = new Thread(my);
my9.setName("窗口9"); Thread my10 = new Thread(my);
my10.setName("窗口10"); my1.start();
my2.start();
my3.start();
my4.start();
my5.start();
my6.start();
my7.start();
my8.start();
my9.start();
my10.start(); }
}



进程与线程

进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,

多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。

启动线程:

线程的主要代码是在run方法里写的,但是启动的时候是调用Thread的start方法启动。

线程的状态

要想实现多线程,必须在主线程中创建新的线程对象。

任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。

取得和设置线程名称;

在Thread类中,可以通过getName()方法取得线程的

名称,通过setName()方法设置线程的名称。

线程的名称一般在启动线程前设置,但也允许为已经运行的线程设置名称。

允许两个Thread对象有相同的名字,但为了清晰,应该尽量避免这种情况的发生。

另外,如果程序并没有为线程指定名称,则系统会自动的为线程分配-一个名称。

同步代码块

在代码块上加上“synchronized"关键字的话,则此代码块就称为同步代码块。

代码块格式:

  synchronized(同步对象){
需要同步的代码;
}

第九周学习总结&实验报告七的更多相关文章

  1. 第九周课程总结&实验报告七

    实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. package ...

  2. 第九周学习总结&实验报告(7)

    完成火车站售票程序的模拟. 要求: (1)总票数1000张; (2)10个窗口同时开始卖票; (3) 卖票过程延时1秒钟; (4)不能出现一票多卖或卖出负数号票的情 况 实验代码: package y ...

  3. 第五周学习总结&实验报告(三)

    第五周学习总结&实验报告(三) 这一周又学习了新的知识点--继承. 一.继承的基本概念是: *定义一个类,在接下来所定义的类里面如果定义的属性与第一个类里面所拥有的属性一样,那么我们在此就不需 ...

  4. 第九周课程总结 & 实验报告(七)

    第九周课程总结 一.多线程 1.线程的状态 2.线程操作的相关方法 二.Java IO 1.操作文件的类---File ()基本介绍 ()使用File类操作文件 .RandomAccessFile类 ...

  5. 第五周学习总结&实验报告三

    第五周课程总结 1.this和super的区别: this:访问本类中的属性,如果本类没有此属性则从父类中继续查找:访问本类中的方法,如果本类中没有此方法则从父类中继续查找:调用本类构造,必须放在构造 ...

  6. 第八周学习总结&实验报告(6)

    实验六 异常 一.实验目的: (1)理解异常的基本概念: (2)掌握异常处理方法及熟悉常见异常的捕获方法. 二.实验要求: (1)练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使 ...

  7. 第十三周学习总结&实验报告(八)

    图像界面 件处理及监听处理 1.键盘事件(KeyEvent)及监听处理(KeyListener) 1.1加入事件监听 super.addWindowListener(new WindowAdapter ...

  8. 第九周课程总结&实验报告(七)

    实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. 实验代码 pac ...

  9. 第九周课程总结&实验报告

    实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. public c ...

随机推荐

  1. 如何同步多个 git 远程仓库

    请看 -> 如何同步多个 git 远程仓库

  2. vue cli更新

    关于旧版本 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vu ...

  3. javaScript中 数组的新方法(reduce)

    定义和用法 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. 注意: redu ...

  4. ubuntu 创建定时备份pg数据库定时任务

    ubuntu创建定时备份数据库定时任务 一.命令文件 创建db_back.sh #!/bin/bash echo "start backup" /usr/lib/postgresq ...

  5. nginx redirect ignore port 两层nginx跳转忽略了端口

    问题: 两层nginx做代理,第一层:nginx:将9087->代理到80端口,第二层:将80端口->流量打到我们的代码上,结果在代码中拿到的链接不带9087端口,则代码中发生跳转的时候, ...

  6. mysql5.7主从复制及相关注意点!

    首先在两台不同IP的服务器安装相同版本的mysql(也可以docker 用 network模式).例如 主数据库(master) 178.18.0.2 my.cnf的设置(一般在/etc/mysql/ ...

  7. Mac下安装svn服务器

    本文转载自http://www.cnblogs.com/czq1989/p/4913692.html Mac默认已经安装了svn,我们只需要进行配置并开启就可以了 首先我们可以验证一下是否安装了svn ...

  8. Spring Boot热部署插件

    在实际开发中,我们修改某些代码逻辑功能或页面都需要重启应用,这无形中降低了开发效率,热部署是指当我们修改代码后,服务能自动重启加载新修改的内容,而不需要重启应用,这样大大提高了我们开发的效率. Spr ...

  9. javascript join以及slice,push函数

    1.join定义和用法 join() 方法用于把数组中的所有元素放入一个字符串. 元素是通过指定的分隔符进行分隔的. arrayObject.join(separator) separator:可选. ...

  10. [CF#592 E] [二分答案] Minimizing Difference

    链接:http://codeforces.com/contest/1244/problem/E 题意: 给定包含$n$个数的数组,你可以执行最多k次操作,使得数组的一个数加1或者减1. 问合理的操作, ...