第九周课程总结&实验报告
Posted lyl68
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九周课程总结&实验报告相关的知识,希望对你有一定的参考价值。
第九周课程总结&实验报告(七)
课程总结:
(一)多线程
- 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的选择和分配问题;
以上是关于第九周课程总结&实验报告的主要内容,如果未能解决你的问题,请参考以下文章