• 线程模拟售票问题


    线程是我们学习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;
    }
    }
    }
    }
    }

  • 相关阅读:
    MySQL约束笔记
    MySQL 存储过程入门
    数据库范式
    Hibernate 懒加载 错误----no session
    复选框 checkbox 选中事件
    Hibernate 三种状态变化 与 sql 语句的关系
    Spring 4 + Hibernate 4 下 getCurrentSession()的使用情况
    35个java代码性能优化总结
    为什么 Java中1000==1000为false而100==100为true?AND "2+2=5"?
    MyBatis对象关联关系----多对多的保存与查询
  • 原文地址:https://www.cnblogs.com/zhouguoshuai/p/10129106.html
Copyright © 2020-2023  润新知