• 第九周作业及总结


    实验任务详情:

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

    本次作业代码通过书上Runnable方法解决,参考书上270页使用同步方法解决。

    package zjj;
    
    class Window1 implements Runnable{
    	int ticket = 1000;
    	public void run() {
    		while (true) {
    			if (ticket>0) {
    				try {
    					Thread.sleep(100);
    				}catch(InterruptedException e) {
    					e.printStackTrace();
    				}
    				System.out.println(Thread.currentThread().getName()+"售票,票号为:"+ticket--);
    			}else {
    				break;
    			}
    		}
    	}
    	
    }
    

    测试:

    package zjj;
    
    public class Test {
    	public static void main(String[] args) {
    		Window1 w = new Window1();
    		Thread t1 = new Thread(w);
    		Thread t2 = new Thread(w);
    		Thread t3 = new Thread(w);
    		Thread t4 = new Thread(w);
    		Thread t5 = new Thread(w);
    		Thread t6 = new Thread(w);
    		Thread t7 = new Thread(w);
    		Thread t8 = new Thread(w);
    		Thread t9 = new Thread(w);
    		Thread t10 = new Thread(w);
    		
    		t1.setName("窗口1");
    		t2.setName("窗口2");
    		t3.setName("窗口3");
    		t4.setName("窗口4");
    		t5.setName("窗口5");
    		t6.setName("窗口6");
    		t7.setName("窗口7");
    		t8.setName("窗口8");
    		t9.setName("窗口9");
    		t10.setName("窗口10");
    
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    		t5.start();
    		t6.start();
    		t7.start();
    		t8.start();
    		t9.start();
    		t10.start();	
    	}
    }
    


    此为正确截图,没有错误出现,应该是满足了题目要求,因为是要1000张票,也没仔细看运行结果哈哈。

    总结:
    本周学习了多线程方法,实例具体为卖票程序

    线程操作我们可以通过Thread类和Runnable类来实现
    Thread类实现了Runnable接口,在Thread类中,有一些比较关键的属性,比如name是表示Thread的名字,可以通过Thread类的构造器中的参数来指定线程名字,priority表示线程的优先级(最大值为10,最小值为1,默认值为5),daemon表示线程是否是守护线程,target表示要执行的任务。
    下面是Thread类中常用的方法:
    以下是关系到线程运行状态的几个方法:
    1)start方法
    start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。
    2)run方法
    run()方法是不需要用户来调用的,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务。注意,继承Thread类必须重写run方法,在run方法中定义具体要执行的任务。
    3)sleep方法
    sleep方法有两个重载版本

    Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的
    run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。
    在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。
    折叠

  • 相关阅读:
    c#调用系统资源大集合1
    ASP.NET GridView,DataList,Repeater日期格式显示
    msSQL存储过程中使用 IF ELSE 的规范示例
    PHP DOMDocument简单用法(XML创建、添加、删除、修改)
    PHP解析XML文档属性并编辑
    php修改和增加xml结点属性
    asp.net FileUpload控件文件格式的判断及文件大小限制
    《Linux内核设计与实现》读书笔记(四) 进程的调度
    《Linux内核设计与实现》读书笔记(七) 中断处理
    红黑树
  • 原文地址:https://www.cnblogs.com/zou1223/p/11736465.html
Copyright © 2020-2023  润新知