• 第九周课程总结&实验报告(七)


    第九周课程总结&实验报告(七)

    实验任务详情:

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

    实验过程:

    1.实验代码

    public class Test {
        public static void main(String[] args){
            Thread[] t=new Thread[10];
            Market mar=new Market();
            mar.setTicket(1000);
            for(int i=0;i<10;i++){
                new Thread(mar,i+1+"窗口").start();
            }
        }
    }
    package com.company;
    
    public class  Market implements Runnable{
      private int ticket;
        void setTicket(int ticket) {
            this.ticket = ticket;
        }
        public int getTicket() {
            return ticket;
        }
        public void  run() {
            for(int i=1;i<100;i++) {
                synchronized (this) {
                    if (ticket > 0) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        ticket--;
                        System.out.println(Thread.currentThread().getName() + "卖票成功;" +"余票:"+ticket);
                    }
                }
            }
        }
    }

    2.代码截图

    3.实验结果

     

    总结

    进程与线程

     进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
     多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。

    启动线程

    线程的主要代码是在run方法里写的,但是启动的时候是调用Thread的start方法启动。

    线程的状态

    要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。

    取得和设置线程名称;

    在Thread类中,可以通过getName()方法取得线程的
    名称,通过setName()方法设置线程的名称。
    
    线程的名称一般在启动线程前设置,但也允许为已经运行的线程设置名称。允许两个Thread对象有相同的名字,但为了清晰,应该尽量避免这种情况的发生。
    
    另外,如果程序并没有为线程指定名称,则系统会自动的为线程分配-一个名称。

    同步代码块

    在代码块上加上“synchronized"关键字的话,则此代码块就称为同步代码块。
    代码块格式:
          synchronized(同步对象){
          需要同步的代码;
          }
  • 相关阅读:
    手机电阻式和电容式触摸屏九大区别
    AMBA、AHB、APB总线简介
    PHY芯片
    S3C2440A Memory design
    ARM、DSP、FPGA的技术特点和区别
    LPC2104的Boot与Remap详解(一)
    Memorymapped I/O
    Motherboard Chipsets and the Memory Map
    88f6282 notes
    太网设计FAQ:以太网MAC和PHY
  • 原文地址:https://www.cnblogs.com/girlsteam/p/11737576.html
Copyright © 2020-2023  润新知