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

    实验报告

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

    代码

    
    public class Mythread implements Runnable {
    
    	private int ticket = 1000;
    	
    	public void run() {
    		
    		for(int i=0;ticket>0;)
    		{
    			synchronized(this){
    				if(ticket>0) {
    					try {
    						Thread.sleep(1000);
    					}catch(InterruptedException ie) {
    						//ie.printStackTrace();
    					}
    					System.out.println(Thread.currentThread().getName()+"卖出第"+ticket+"张票");
    					ticket--;
    				}
    			}
    		}
    	}
    
    }
    
    测试
    
    public class Test {
    
    	public static void main(String[] args) {
    		Mythread t1 = new Mythread();
    		
    		
    		new Thread(t1,"1窗口").start();
    		new Thread(t1,"2窗口").start();
    		new Thread(t1,"3窗口").start();
    		new Thread(t1,"4窗口").start();
    		new Thread(t1,"5窗口").start();
    		new Thread(t1,"6窗口").start();
    		new Thread(t1,"7窗口").start();
    		new Thread(t1,"8窗口").start();
    		new Thread(t1,"9窗口").start();
    		new Thread(t1,"10窗口").start();
    	}
    
    }
    

    遇到的问题

    1.输出的同一张票重复的情况;

    解决办法:run()方法中的输出中把票的计数改为用ticket计数。
    2.没有显示每个线程的名称;

    解决办法:在run()方法的输出中调用Thread.currentThread().getName(),在main()方法中启动线程时可以给线程命名。

    运行结果





    学习总结

    线程的一些主要方法;
    取得和设置线程的名称:取得名称用Thread.currentThread().getName(),手工设置线程名称是在启动线程时new Thread(对象名称,"线程名称").start();
    中断线程:在一个线程运行时,另一个线程可以直接通过interrupt()方法中断其运行状态;
    同步:在多个线程操作同一资源时,有可能出现资源的同步问题,使用“同步代码块”或“同步方法”来避免;
    同步代码块:

    synchronized(同步对象){
           //需要同步的代码
    }
    

    同步方法:

    synchronized 方法返回值 方法名称(参数列表){
       //方法体
    }
    

    File类
    File类的构造方法:
    public File(String pathname); 实例化File类的时候,必须设置好路径
    File类的主要操作方法:
    File类的常量:pathSeparator表示; separator表示
    RandomAccessFile类的常用操作方法;

    注意:

    1.主方法实际上也是一个线程;
    2.在java运行时至少会启动两个线程:一个是main线程,另一个是垃圾收集线程;
    3.在调用yield()方法做线程礼让时,会将当前线程暂停一下,让其它线程进行,但是是否会礼让成功,由CPU决定。

  • 相关阅读:
    Servlet--j2e中文乱码解决
    python 通过ftplib 实现上传下载
    使用sqlyog将sql server 迁移到mysql
    c++
    二进制(signed or unsigned)补码
    sql 2012先分离迁移mdf mlf 文件到别的机器后附加 数据库成只读的修复方法
    events
    NoSQL文章
    程序员如何成功的假装在很努力的工作(转)
    如何成为强大的程序员(转)
  • 原文地址:https://www.cnblogs.com/LeeMayZ/p/11733695.html
Copyright © 2011-2022 走看看