第九周学习总结&实验报告七
实验报告:
实验任务详情:
完成火车站售票程序的模拟。
要求:
(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)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. package ...
- 第九周学习总结&实验报告(7)
完成火车站售票程序的模拟. 要求: (1)总票数1000张; (2)10个窗口同时开始卖票; (3) 卖票过程延时1秒钟; (4)不能出现一票多卖或卖出负数号票的情 况 实验代码: package y ...
- 第五周学习总结&实验报告(三)
第五周学习总结&实验报告(三) 这一周又学习了新的知识点--继承. 一.继承的基本概念是: *定义一个类,在接下来所定义的类里面如果定义的属性与第一个类里面所拥有的属性一样,那么我们在此就不需 ...
- 第九周课程总结 & 实验报告(七)
第九周课程总结 一.多线程 1.线程的状态 2.线程操作的相关方法 二.Java IO 1.操作文件的类---File ()基本介绍 ()使用File类操作文件 .RandomAccessFile类 ...
- 第五周学习总结&实验报告三
第五周课程总结 1.this和super的区别: this:访问本类中的属性,如果本类没有此属性则从父类中继续查找:访问本类中的方法,如果本类中没有此方法则从父类中继续查找:调用本类构造,必须放在构造 ...
- 第八周学习总结&实验报告(6)
实验六 异常 一.实验目的: (1)理解异常的基本概念: (2)掌握异常处理方法及熟悉常见异常的捕获方法. 二.实验要求: (1)练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使 ...
- 第十三周学习总结&实验报告(八)
图像界面 件处理及监听处理 1.键盘事件(KeyEvent)及监听处理(KeyListener) 1.1加入事件监听 super.addWindowListener(new WindowAdapter ...
- 第九周课程总结&实验报告(七)
实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. 实验代码 pac ...
- 第九周课程总结&实验报告
实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. public c ...
随机推荐
- WPF文本输入框关闭Win10输入法设置
今天一个同事突然站起来给了我一个眼神,我就知道没啥好事.果然给我指出了一些bug,其中一个是这样的,密码输入框只能输入一个字符,再输入就输入不了. 这种降档次的错误咱也能出,果断夺过键盘,疯狂输入一番 ...
- golang(2):基本数据类型和操作符
1). 文件名 & 关键字 & 标识符 . 所有go源码都以 .go 结尾 . 标识符以字母或下划线开头,大小写敏感 . _ 是特殊标识符,用来忽略结果 . 保留关键字 golang ...
- luogu题解 P2419 【牛大赛Cow Contest】传递丢包
题目链接: https://www.luogu.org/problemnew/show/P2419 分析: "在交际网络中,给定若干元素和若干对二元关系,且关系具有传递性. 通过传递性推导出 ...
- SQL-Serverの自動採番(IDENTITY値)の取得・リセット
システムに必要なテーブルで.自動的に番号を振っていくものが必要なときがあります. たとえば.各種の伝票データの伝票番号の様なものです. プログラム処理上.データを登録した直後に.自動採番された値を取得 ...
- hashmap的hash方法源doc解读
/** * Computes key.hashCode() and spreads (XORs) higher bits of hash * to lower. Because the table u ...
- 21、Nginx 常见问题
1.多个server_name容易产生冲突,会按照如下顺序匹配 1.首先选择所有的字符串完全匹配的server_name.(完全匹配) 2.选择通配符在前面的server_name,如*.bgx.co ...
- 为Qtcreator 编译的程序添加管理员权限
(1)创建资源文件 myapp.rc 1 24 uac.manifest (2)创建文件uac.manifest <?xml version="1.0" encoding=& ...
- php保留两位小数并且四舍五入 保留两位小数并且不四舍五入
php保留两位小数并且四舍五入 $num = 5566.56831; echo sprintf("%.2f", $num); php保留两位小数并且不四舍五入 $num = 556 ...
- 清除zencart分类页多页后面的&disp_order &sort字符串的方法
在includes\classes\split_page_results.php页面中的function display_links()函数第一行添加如下两行代码即可$parameters=preg_ ...
- Oracle 导入dump
1. 准备好.dmp文件