zoukankan      html  css  js  c++  java
  • 线程模拟售票问题

    线程是我们学习Java知识中一个重要的难点,首先我们要明白两种创建线程的方法,其次在售票问题中我们要注意线程并发带来的线程安全问题。

    最后我们要明白几个重要的概念:

    ①保证代码原子性:所谓代码原子性是指当a线程在执行某段代码块的时候,别的线程必须等待 ,直到a线程执行完才可以执行这段代码。

    ②对象锁:java中处理线程同步的办法非常简单,只需要在你需要同步的代码块上加上语句:synchronized (object) {需要同步的代码块} ,即可。

    ③获取线程名称的方法:Thread.currentThread().getName()。

    代码如下:

    package com.thread;

    public class ThreadShouPiao {

    /**
    * 功能:线程售票:解决线程并发带来的线程安全问题(保证代码的原子性)
    * 对象锁的概念
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    //创建一个售票窗口对象
    ThreadWindowTicks twk=new ThreadWindowTicks();
    //创建三个线程,同时启用
    Thread th1=new Thread(twk);
    Thread th2=new Thread(twk);
    Thread th3=new Thread(twk);
    th1.start();
    th2.start();
    th3.start();
    }
    }
    //窗口售票类
    class ThreadWindowTicks implements Runnable{

    private int piao_num=2000;

    public void run() {
    // TODO Auto-generated method stub
    while(true){
    //要保证if else语句原子性(同步代码块)
    synchronized (this) {//对象锁
    if(piao_num>0&&piao_num<=2000){
    System.out.println(Thread.currentThread().getName()+"卖第"+piao_num+"张票");
    try {
    Thread.sleep(1000);

    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    piao_num--;
    }
    else {
    break;
    }
    }
    }
    }
    }

  • 相关阅读:
    前端,DJ
    打印九九乘法表
    求数组中最大值和最小值
    求数组中最大值和次大值
    数据库 Mysql 使用,优化,索引
    List、Map、Set的区别与联系
    1001个整数,每个数范围1到1000,求出重复的数字。
    一个正整数是否等于因数之和
    滑动验证 和滑动图片验证JS
    cmd中mvn命令,出现No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
  • 原文地址:https://www.cnblogs.com/zhouguoshuai/p/10129106.html
Copyright © 2011-2022 走看看