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

    实验任务详情:

    完成火车站售票程序的模拟。

    要求:

    (1)总票数1000张;

    (2)10个窗口同时开始卖票;

    (3)卖票过程延时1秒钟;

    (4)不能出现一票多卖或卖出负数号票的情况。

    实验代码:

    package 作业;
    
    class MyThread implements Runnable{
    	private int ticket=10;
    	public void run() {
    		for(int i=0;i<10;i++) {
    			this.sale();
    		}
    	}
    	public synchronized void sale() {
    		if(ticket>0) {
    			try {
    				Thread.sleep(1000);
    			}catch(InterruptedException e) {
    				e.printStackTrace();
    			}
    			System.out.println(Thread.currentThread().getName()+"正在售出第"+ticket--+"张票");
    		}
    	}
    };
    public class test {
        public static void main(String args[]) {
            MyThread my=new MyThread();
            Thread t1 = new Thread(my,"1号窗口");
            Thread t2 = new Thread(my,"2号窗口");
            Thread t3 = new Thread(my,"3号窗口");
            Thread t4 = new Thread(my,"4号窗口");
            Thread t5 = new Thread(my,"5号窗口");
            Thread t6 = new Thread(my,"6号窗口");
            Thread t7 = new Thread(my,"7号窗口");
            Thread t8 = new Thread(my,"8号窗口");
            Thread t9 = new Thread(my,"9号窗口");
            Thread t10 = new Thread(my,"10号窗口");
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            t5.start();
            t6.start();
            t7.start();
            t8.start();
            t9.start();
            t10.start();
        }
    }
    

    运行结果截图:

    设计思路:
    1、一开始是和书上271页是一样的;
    2、改进后用getname取得线程名字,但不喜欢系统给的-1、-2;
    3、用new Thread(my,"线程A").start;手工设置线程名字。

    课程总结:
    进程是程序的一次动态执行过程,它经历了从代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多个线程交替运行,单核运行方式。
    在Java中,实现多线程代码有两种方式:一种是继承Thread类;另一种是实现Runnable接口。

    继承Thread类
    一个类只要继承了Thread类,就称为多线程操作,在Thread子类中,必须明确覆写run()方法;启动线程用start()方法。

    class 类名称 extends Thread{
          属性***;
          方法***;
          public void run(){
               线程主体;
          }
    }
    

    Thread类不可共享资源

    Runnable接口
    因为启动一个多线程必须要使用start()方法,所以本质还是依靠Thread类启动。
    Runnable接口可以资源共享;
    同步与死锁:如果多个线程需要操作,统一资源时就有可能出现资源的同步问题。

  • 相关阅读:
    unity3d 随机生成地形之随机山脉
    unity3d ppsspp模拟器中的post processing shader在unity中使用
    unity3d shader之实时室外光线散射(大气散射)渲染
    Unity3d 游戏中的实时降噪-对Square Enix文档的研究与实现
    Unity3d 获取屏幕depth与normal
    unity3d Hair real time rendering 真实头发实时渲染
    java.net.URL类
    Springboot定时任务
    Base64编码
    ShiroUtil 对密码进行加密
  • 原文地址:https://www.cnblogs.com/qiuf99999/p/11735806.html
Copyright © 2011-2022 走看看