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

    课程总结

    这周我们学习了多线程和一点点关于文件的输入与输出。

    线程

    线程共分为两大类 继承Thread 以及 实现Runnable接口。

    取得线程名称:Thread。curentThread().getNane()
    判断线程是否启动 isAlive();
    线程强制运行 join();
    后台线程 setDaemon();
                             最高级 MAX—PRIORITY
    线程的优先级   最高级 NORM—PRIORITY
                             最低级 MIN—PRIORITY
     线程的礼让 yield()
    

    同步代码块

    synchronized(同步对象){        ///synchronized(this)this表示当前对象
            需要同步的代码块;
    }
    

    同步方法

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

    操作文件的类File

    使用RandonAcccessFile类写入数据

    实验报告

    实验任务详情:
    完成火车站售票程序的模拟。

    要求:

    (1)总票数1000张;
    (2)10个窗口同时开始卖票;
    (3)卖票过程延时1秒钟;
    (4)不能出现一票多卖或卖出负数号票的情况。
    代码

    实现Runnable接口类
    package test12;
    
    public class MyThread implements Runnable {
    	private int ticket = 1000;
    
    	public void run() {
    
    		for (int i = 1; i <= 1000; i++) {
    			synchronized (this) {
    				if(ticket==0) {
    					System.out.println(Thread.currentThread().getName() + "票已售完!");
    					break;
    				}
    				if (ticket > 0) {
    					ticket--;
    					try {
    						Thread.sleep(0);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    					System.out.println(Thread.currentThread().getName() + " 买出一张票    余票:ticket=" + ticket);
    
    				}
    			}
    		}
    
    	}
    };
    
    测试类
    package test12;
    
    public class Ceshi {
    
    	public static void main(String[] args) {
    		MyThread mt = new MyThread();
    		new Thread(mt, "窗口1").start();
    		new Thread(mt, "窗口2").start();
    		new Thread(mt, "窗口3").start();
    		new Thread(mt, "窗口4").start();
    		new Thread(mt, "窗口5").start();
    		new Thread(mt, "窗口6").start();
    		new Thread(mt, "窗口7").start();
    		new Thread(mt, "窗口8").start();
    		new Thread(mt, "窗口9").start();
    		new Thread(mt, "窗口10").start();
    
    	}
    }
    

    运行截图



  • 相关阅读:
    关于 flutter_boost splash加载动画
    [BS-23] AFN网络请求上拉/下拉刷新的细节问题总结
    [BS-22] Objective-C中nil、Nil、NULL、NSNull的区别
    [BS-21] 关于OC中对象与指针的思考
    [BS-20] 导航控制器和视图控制器在添加控制器的区别
    ios runtime swizzle
    关于C、OC、C++、OC++、Swift的一些常识
    iOS多线程知识总结--GCD
    使用代码创建AutoLayout约束
    iOS中NSLog输出格式大全
  • 原文地址:https://www.cnblogs.com/djhxxx/p/11734804.html
Copyright © 2011-2022 走看看