记录我的成长吧~

第九周课程总结&实验报告(七)

一、学习总结

进程与线程

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

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();
        }
    }
}


posted @ 2019-10-25 13:13  ToT!  阅读(198)  评论(1编辑  收藏  举报

愛生活 愛自己

你是最棒的