码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-24 23:21:11      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:rri   延时   current   好的   dir   还需要   做了   设置   排队   

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

课程总结:

(一)多线程

  • 1.这一周我们接着上一周的多线程学习了实现Runnable接口,上一周中学习了Thread类,thread类实现的是多线程,但是这个还是很局限的,而Runnable接口是用来实现资源共享同时也可以通过Runnable接口的方式实现多线程。
格式:
class 类名称 implements Runnable{
     属性;
     方法;
     public viod run(){
            线程主体;
   }
}

我们需要注意的是,如果我们启动的是Runnable接口,那么我们仍然要依靠thread类完成启动,在Thread类中提供构造方法。在启动的时候我们就需要调用start()方法来完成,当然如果是是继承了####Thread类,则可以直接在Thread类中使用start()方法。所以说无论哪一种方法最终都需要依靠Thread类才能启动多线程。

实现Runnable接口相对于继承Thread类来说,有如下优势:

  • (1)适合多个相同程序代码的线程去处理同一资源情况;
  • (2)可以避免由于Java的单继承特性所带来的局限;
  • (3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;
    2.线程一般具有5种状态,即创建、就绪、运行、阻塞、终止。

    创建状态:

    在程序中用构造方法创建一个线程对象之后,新的线程对象便处于新建状态。此时,他已经有了相应的内存空间和其他资源,但还处于不可以运行状态。新建一个线程对象可采用Thread类的构造方法实现,例如“Thread thread =new Thread()”。

就绪状态:

新建线程对象之后,调用该线程的start()方法就可以启动线程。当启动线程是,线程进入就绪状态。此时,线程将进入线程队列排队,对待CPU服务,这表明他已经具备了运行条件;

运行状态:

当就绪的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的run()方法。Run方法定义了该线程的操作和功能。

堵塞状态:

一个宅执行的线程在某些特殊情况下,如果被人为挂或需要执行耗时的输入输出操作时,会让出CPU并暂时中止自己的执行,进入堵塞状态。在可执行的情况下,如果调用sleep()、suspend()、wait()等方法,线程都将进入堵塞状态。堵塞时,线程不能进入排队队列,只有当堵塞的原因被消除之后,线程才可以转入就绪状态。

死亡状态:

线程调用stop()方法时或run()方法执行结束后,即处于死亡状态。处于死亡状态的线程不具有继续运行的能力。

(二)Java IO

操作文件的类——File

在整个IO包中,唯一表示与文件本身有关的类就是File类,使用file类可以进行创建或删除文件等常用操作。
File类的构造方法:

public File(String pathname )  //实例化File类的时候,必须设置好路径。

创建一个新文件:

File类实例化之后,就可以使用createNewFile()创建一个新的文件,但是此方法使用了throws关键词,使用在使用中,必须使用try...catch进行异常处理。
import java.io.File;
public class File{
public static void main(String[] args) {
      String path=“d:”+File.separator+”test.txt”;
           File f=new File(path);
          try{
                   createNewFile();
      }catch(IOException e){
                       e.printStackTreace();
          }
} 
通过这个程序之后,在D盘就创建好了一个文件;但是我们需要注意的是,不同操作系统中,路径的分隔符是不同的;
  • 在Windows中使用的是反斜杠表示目录分隔符:“”。
  • 在Linux中使用正斜杠表示目录的分隔符:“/”。

文件的删除和创建:

import java.io.File;
public class File{
public static void main(String[] args) {
      String path=“d:”+File.separator+”test.txt”;
           File f=new File(path);
                if(f.exists()){
                            f.delete();
                 }else {
                           try{
                                  createNewFile();
                    }catch(IOException e){
                                        e.printStackTreace();
                }
          }
}
  • 创建文件夹:直接使用mkdir()方法就可以完成。
import java.io.File;
public class File{
public static void main(String[] args) {
      String path=“d:”+File.separator+”test.txt”;
           File f=new File(path);
            f.makdir();
        }
}

一周的学习还是比较有趣的,感觉想到了很多知识,课后用电脑实现了代码,自己创建了,文件,文件夹,删除以及列出文件目录;同时觉得Java学习也越来越难,知识点多起来了就需要去更好的掌握,所以自己还需要更加的努力。

技术图片

实验报告:

完成火车站售票程序的模拟。
要求:

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

实验代码:

package shyseven;

class Ticket implements Runnable{

    int ticket =1000;

    @Override
    
    public void run() {

        while(ticket>0){
            synchronized(this) {
                if(ticket>0) {
                    
                    try {
                        Thread.sleep(1000);
                    }catch(InterruptedException e) {
                        e.printStackTrace();
                    }
                    ticket--;
                    System.out.println(Thread.currentThread().getName()+"卖票一张:剩余tickets"+ticket+"张");
                    
                    if(ticket<0) {
                        System.out.println("票已售完");
                    }
                }
            }
        }
    }
    

}
package shyseven;

public class Text {

    public static void main(String[] args) {
        Ticket str=new Ticket();
         new Thread(str,"1号窗口").start();
         new Thread(str,"2号窗口").start();
         new Thread(str,"3号窗口").start();
         new Thread(str,"4号窗口").start();
         new Thread(str,"4号窗口").start();
         new Thread(str,"5号窗口").start();
         new Thread(str,"6号窗口").start();
         new Thread(str,"7号窗口").start();
         new Thread(str,"8号窗口").start();
         new Thread(str,"9号窗口").start();
         new Thread(str,"10号窗口").start();
         
    }
}

技术图片

技术图片

技术图片

这个实验题目不是很难,因为老师上课讲过,完全就是一样的题目,但是我却做了好久好久,原因是起初没有同步,只进行了资源共享,结果出现了有负数的情况,后来结果仔细查找之后,发现了这个问题,解决之后,又发现虽然实现了资源共享却不能实现同步,而这个同步问题很难解决,我进行十个线程同时进行售票,但是结果却一直是只有一个窗口显示卖票,起初是初试类出现了问题,多次改变实例化方法,但是最后还是错了,然后去网上查找之后,复制粘贴代码还是运行不了,最后我按照书本上的代码,经过无数次运行结果终于发现了有两个窗口售票,其它的窗口依旧没有显示,不知道是运行了还是没有运行,也有可能是CPU的原因,因为最后还是出现了两个窗口售票,所以可以肯定的是重新应该没有问题,出现问题的是CPU的选择和分配问题;

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

标签:rri   延时   current   好的   dir   还需要   做了   设置   排队   

原文地址:https://www.cnblogs.com/lyl68/p/11735448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!