package cn.tedu.demo;

/**
* @author 赵瑞鑫 E-mail:1922250303@qq.com
* @version 1.0
* @创建时间:2020年7月31日 下午2:28:24
* @类说明: 綫程的生命周期:從創建到消亡。新建狀態:new
* Thread();就緒狀態:start();阻塞狀態:sleep(),wait();運行狀態:run();
* 消亡:執行完run方法的語句就自然消亡了,再次使用須再次創建
* 綫程的優先級:不同優先級:高優先級先執行,低優先級后執行;同一優先級:先到先服務;
* 綫程優先級的定義:怎麽規範綫程的優先級:系統默認綫程的優先級。 人爲設置綫程的優先級。
* 綫程的同步:儅多個綫程共同訪問一個共享變量時,可能會導致共享變量的不完整或者説不安全(解決方案:pv操作)
* 爲了共享變量的安全性,使用同步機制保證共享變量的安全性
* 當一個綫程改變共享變量時,其他綫程不能使用共享變量,儅綫程計算完成後,其他綫程才可以使用共享變量(
* 使用Synchronized關鍵字實現綫程同步;同步塊:Synchronized(鎖對象){操作共享變量的代碼(運算)})
* 在方法Synchronized上用此關鍵字修飾的方法叫做同步方法
*/
public class Demo7 {
private static int ticket = 10; public static void test1() {
Thread r = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (Demo7.class) { if (ticket <= 0) {
try {
throw new Exception("票賣完了");
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
break;
}
} else {
Demo7.ticket--;
System.out.println(Thread.currentThread().getName() + "賣了一張票,還剩" + ticket + "張");
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
};
r.start();
} public static void test2() {
Thread t1 = new Thread(() -> {
for (int i = 1; i < 11; i++) {
System.out.println("t1");
}
});
Thread t2 = new Thread(() -> {
for (int i = 1; i < 11; i++) {
System.out.println("t2");
}
});
Thread t3 = new Thread(() -> {
for (int i = 1; i < 11; i++) {
System.out.println("t3");
}
});
t3.setPriority(Thread.MAX_PRIORITY);
t1.setPriority(Thread.NORM_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
t3.start();
} public static void main(String[] args) {
// TODO Auto-generated method stub test1();
} }

实验11——java线程模拟卖票的更多相关文章

  1. java多线程实现卖票小程序

    package shb.java.demo; /** * 多线程测试卖票小程序. * @Package:shb.java.demo * @Description: * @author shaobn * ...

  2. java 多线程之卖票两种方式

    1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...

  3. java笔记线程电影院卖票改进版

    通过加入延迟后,就产生了连个问题: * A:相同的票卖了多次 *   CPU的一次操作必须是原子性的 * B:出现了负数票 *   随机性和延迟导致的 public class SellTicketD ...

  4. java笔记线程电影院卖票最终版

    * 如何解决线程安全问题呢? *  * 要想解决问题,就要知道哪些原因会导致出问题:(而且这些原因也是以后我们判断一个程序是否会有线程安全问题的标准) * A:是否是多线程环境 * B:是否有共享数据 ...

  5. JAVA培训—线程同步--卖票问题

    线程同步方法: (1).同步代码块,格式: synchronized (同步对象){ //同步代码 } (2).同步方法,格式: 在方法前加synchronized修饰 问题: 多个人同时买票. 1. ...

  6. 11 java 线程池 使用实例

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  7. 11 java 线程池 实现原理

    一 关键类的实现 1 ThreadPoolExecutor类 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的 ...

  8. C++ 多线程编程实例【2个线程模拟卖火车票的小程序】

    原文:http://blog.csdn.net/chen825919148/article/details/7904219 核心提示:从网上搜集来的非常基础的C++多线程实例,刚入门的可以看看,希望能 ...

  9. java学习多线程之卖票示例

    这一节我们来说一个示例就是卖票示例: 需求: 我们现在有100张票,然后分四个窗口来卖,直到卖完为止. 思路: 1.先定一个一个票类,描述票的属性,还有打印卖出的票,并且实现Runnable中的run ...

随机推荐

  1. C++求树子节点权重最大的和

    #include <iostream> #include <vector> using namespace std; int n; const int MaxN = 1e5; ...

  2. JavaScript学习 Ⅳ

    八. 批量创建对象 使用工厂方法创建对象 function creatPerson(name, age, gender='男'){ var obj = new Object(); obj.name = ...

  3. VSCode下,项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

    vscode下webpack错误:无法将“webpack”项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 解决方法: 1.因为 ...

  4. java 基本语法(二) 变量的使用(重点)

    1.变量的分类1.1 按数据类型分类 详细说明://1. 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节) //① byte范围:-128 ~ ...

  5. Elasticsearch备份数据

    Elasticsearch备份数据 1.建立备份目录 POST _snapshot/my_backup/ { "type": "fs", "setti ...

  6. JavaScript 对象的创建和操作

    <script>         // 对象是属性的无序集合,每个属性都是一个名/值对. 属性名称是一个字符串.         // 对象种类         // 内置对象(nativ ...

  7. 如何手写一个ArrayList

    写完HashMap,觉得手痒痒,所以隔了一天再来实现一下简单的ArrayList,ArrayList相比而言就非常的简单,主要的核心点有以下几个方面: 1.ArrayList的底层是由数组构成的 2. ...

  8. 深入浅出Java并发包—CountDownLauch原理分析 (转载)

    转载地址:http://yhjhappy234.blog.163.com/blog/static/3163283220135875759265/ CountDownLauch是Java并发包中的一个同 ...

  9. 记一次 Microsoft.Bcl.Async 使用经验

    起因: 由于公司项目使用场景存在很多的XP环境,导致使用.NET Framework版本不能大于4.0版本.最近开发新功能时:从nuget上下载一个开源dll(该dll 4.0 版本依赖 Micros ...

  10. CSS变形动画

    CSS变形动画 前言 在开始介绍CSS变形动画之前,可以先了解一下学习了它之后能做什么,有什么用,这样你看这篇文章可能会有一些动力. 学习了CSS变形动画后,你可以为你的页面做出很多炫酷的效果,如一个 ...