zoukankan      html  css  js  c++  java
  • 第九周课程总结&实验报告(七)

    实验任务详情:

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

    源代码

    package line;
    
    class MyThread implements Runnable{
    	private int ticket = 1000;
    	public void run() {
    			while(true) {
    				synchronized(this) {
    				if(ticket>0) {
    					try {
    						Thread.sleep(100);
    					}catch(InterruptedException e) {
    						e.printStackTrace();
    					}
    					System.out.println(Thread.currentThread().getName()+"正在售出第"+ticket+"张票");
    					ticket--;
    				}
    			}
    		}
    	}	
    };
    public class Demo{
    	public static void main(String[] args) {
    		MyThread m = new MyThread();
    		Thread mt1  = new Thread(m,"窗口0");
    		Thread mt2  = new Thread(m,"窗口1");
    		Thread mt3 = new Thread(m,"窗口2");
    		Thread mt4 = new Thread(m,"窗口3");
    		Thread mt5 = new Thread(m,"窗口4");
    		Thread mt6 = new Thread(m,"窗口5");
    		Thread mt7 = new Thread(m,"窗口6");
    		Thread mt8 = new Thread(m,"窗口7");
    		Thread mt9 = new Thread(m,"窗口8");
    		Thread mt10 = new Thread(m,"窗口9");
    		mt1.start();
    		mt2.start();
    		mt3.start();
    		mt4.start();
    		mt5.start();
    		mt6.start();
    		mt7.start();
    		mt8.start();
    		mt9.start();
    		mt10.start();
    		
    	}
    }
    

    运行截图


    总结

    多线程安全问题的原因:
    发现一个线程在执行多条语句时,并运算同一个数据时,在执行过程中,其他线程参与进来,并操作了这个数据。导致到了错误数据的产生。
    多个线程在操作共享数据,有多条语句对共享数据进行运算。这多条语句,在某一个时刻被一个线程执行时,还没有执行完,就被其他线程执行了。

    解决安全问题的原理:
    只要将操作共享数据的语句在某一时段让一个线程执行完,在执行过程中,其他线程不能进来执行就可以解决这个问题。

    如何进行多句操作共享数据代码的封装呢?

    同步代码块

    synchronized(对象) {  //任意对象都可以。这个对象就是锁。
    
        需要被同步的代码;
    
    }
    
  • 相关阅读:
    快速修改elementUI组件样式
    设置占位符颜色!
    缩放屏幕的时候banner被压缩变形!
    less一些用法整理
    CentOS 7 的目录结构介绍
    为什么需要VMware的 快照、克隆?
    虚拟机概述
    Linux的简单介绍
    VMware克隆已安装的虚拟机
    【vim使用】分屏命令、操作分屏
  • 原文地址:https://www.cnblogs.com/clayLJX/p/11737891.html
Copyright © 2011-2022 走看看