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

    实验任务详情:

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

    实验源码:

    package ash;
    
    public class MyThread implements Runnable{
        private int ticket=1000;
    	public void run() {
    		for(int i=0;i<=1000;i++) {
    			synchronized(this) {
    				if(ticket>0) {
    					try {
    						Thread.sleep(1000); 
    					}catch(InterruptedException e) {
    						e.printStackTrace();
    					}
    					System.out.println(Thread.currentThread().getName()+"剩余票数:"+ticket--);
    				}
    				}
    			}
    			
    	}
    
    }
    
    package ash;
    
    public class Test {
    	public static void main(String args[]) {
    		
    		MyThread my=new MyThread();
    		new Thread(my,"1窗口").start();
    		new Thread(my,"2窗口").start();
    		new Thread(my,"3窗口").start();
    		new Thread(my,"4窗口").start();
    		new Thread(my,"5窗口").start();
    		new Thread(my,"6窗口").start();
    		new Thread(my,"7窗口").start();
    		new Thread(my,"8窗口").start();
    		new Thread(my,"9窗口").start();
    		new Thread(my,"10窗口").start();
    		
    	}
    
    }
    

    实验结果:

    实验过程:

    首先利用runnable接口实现多线程,达到资源共享的目的。本题涉及到几个线程操作的相关方法:1.利用getname()方法设置线程的名称。2.直接使用Thread.sleep()方法进行延时一秒的操作。3.为避免产生负数情况,使用同步代码块(synchronize(同步对象){ })解决同步问题。

    课程总结:

    Thread类(不能被资源共享)与Runnable接口(可以资源共享):

    两者都可以实现多线程,Thread类是Runnable接口的子类,但Thread类没有完全实现Runnable接口中的run()方法。

    线程操作的相关方法:

    ①:取得和设置线程名称(getName());
    ②:判断线程是否启动(isAlive());
    ③:线程的强制运行(jion());
    ④:线程的休眠(Thread.sleep());
    ⑤:中断线程(interrupt());
    ⑥:后台线程(setDaemon());
    ⑦:线程的优先级。哪个线程的优先级高,哪个线程就有可能会先被执行;
    ⑧:线程的礼让(yield())。

    同步与死锁

    ①:使用同步代码块或者同步方法进行同步;
    ②:过多的同步会产生死锁。

    学习总结:

    老师这周布置的作业看来是用心良苦啊。这个题目是老师上课讲的,而且书上都有的。之所以让我们做,原因有三。一、希望我们能有改进优化增加的部分。二、根据作业判断上课成效,同学有没有听进去。三、上周有些抄袭让老师心塞了,所以不为难大家,如果还有人继续照搬他人的,老师以后会改变“政策”吧。

  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/qzy7/p/11735896.html
Copyright © 2011-2022 走看看