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

    一、学习总结

    进程与线程

    ●   进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
    ●   多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。
    

    Java中线程的实现

    ●   在Java中要实现多线程代码的两种手段:
           ●   继承Thread类
           ●  实现Runnable接口
    

    启动线程

    线程的主要代码是在run方法里写的,但是启动的时候是调用Thread的start方法启动。
    

    Thread类和Runnable接口的区别

    ●   实际上Thread类和Runnable接口之间在使用上也是有所区别的,如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,则可以方便的实现资源的共享。
    

    线程的状态

    ●   要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止。
    

    线程操作的主要方法

    取得和设置线程名称;

          ●  在Thread类中,可以通过getName()方法取得线程的
    
          名称,通过setName()方法设置线程的名称。
    
          ●  线程的名称一般在启动线程前设置,但也允许为已经运
    
          行的线程设置名称。允许两个Thread对象有相同的名字,但为了清晰,应该尽量避免这种情况的发生。
    
          ●  另外,如果程序并没有为线程指定名称,则系统会自动的为线程分配-一个名称。
    
    

    判断线程是否启动

    ●  通过Thread类之中的start()方法通知CPU这个线程己经准备好启动,之后就等待分配CPU资源,运行此线程了。那么如何判断一个线程是否已经启动了呢?在Java中可以使用isAlive()方测试线程是否已经启动而且仍然在启动。
    

    线程的强制运行

    ● 在线程操作中,  可以使用join()方法让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才可以继续执行。
    

    线程的休眠

    ●   在程序中允许一个线程进行暂时的休眠,直接使用Thread.sleep()方法即可。
    

    中断线程

    ●   当一个线程运行的时候,另外一个线程可以直接通过interrrupt()方法,中断其运行状态。
    

    线程了礼让

    ●   在线程操作中,也可以使用yield()方法将一个线程的操作暂时让给其他线程执行。
    

    同步代码块

    ●   在代码块上加上“synchronized"关键字的话,则此代码块就称为同步代码块。
    ●   代码块格式:
          synchronized(同步对象){
          需要同步的代码;
          }
    

    二、实验报告

    实验任务详情:

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

    package com.company;
    
    public class Market  implements Runnable{
    
       private int ticket;
    
        public int getTicket() {
            return ticket;
        }
    
        void setTicket(int ticket) {
            this.ticket = ticket;
        }
    
        public void  run() {
            for(int i=1;i<100;i++) {
                synchronized (this) {
                    if (ticket > 0) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        ticket--;
                        System.out.println(Thread.currentThread().getName() + "卖票成功;" +"余票:"+ticket);
                    }
                }
            }
        }
    }
    
    
    package com.company;
    
    public class Test3 {
        public static void main(String[] args){
            Thread[] t=new Thread[10];
            Market mar=new Market();
            mar.setTicket(1000);
            for(int i=0;i<10;i++){
                new Thread(mar,i+1+"窗口").start();
            }
        }
    }
    
    


  • 相关阅读:
    redis未授权访问简单总结
    CORS跨域资源共享漏洞初探
    Mysql UDF提权方法
    hacknos-player靶机渗透
    深入理解Java虚拟机-类加载连接和初始化解析
    Dnslog盲注
    让服务器使用密钥
    自动备份站点
    自动放行nginx后台访问ip
    mysql增备
  • 原文地址:https://www.cnblogs.com/chenxiaolong-cxl/p/11737497.html
Copyright © 2011-2022 走看看