学号-姓名《面向对象程序设计(java)》第十六周学习总结

实验十四  应用程序归档与线程初步

实验时间 2019-12-12

第一部分:理论知识总结

1、程序与进程的概念

程序是一段静态的代码,它是应用程序执行的蓝本。

进程是程序的一次动态执行,它对应了从代码加载、执行至执行完毕的一个完整过程。

‐操作系统为每个进程分配一段独立的内存空间和系统资源,包括:代码数据以及堆栈等资源。每 一个进程的内部数据和状态都是完全独立的。

‐多任务操作系统中,进程切换对CPU资源消耗较大。

2、多线程的概念

‐多线程是进程执行过程中产生的多条执行线索。

线程是比进程执行更小的单位

‐线程不能独立存在,必须存在于进程中,同一进程的各线程间共享进程空间的数据

每个线程有它自身的产生、存在和消亡的过程, 是一个动态的概念。

‐多线程意味着一个程序的多行语句可以看上去几 乎在同一时间内同时运行。

‐线程创建、销毁和切换的负荷远小于进程,又称为轻量级进程(lightweight process)。

201871010111-刘佳华《面向对象程序设计(java)》第十六周学习总结

3、Java实现多线程有两种途径

‐创建Thread类的子类

‐在程序中定义实现Runnable接口的类

4、用Thread类子类创建线程

首先需从Thread类派生出一个子类,在该子类中重写run()方法。

class hand extends Thread

{

    public void run()

    {……}

}

5、用Thread类的子类创建多线程的关键性操作

–定义Thread类的子类并实现用户线程操作,即 run()方法的实现。

–在适当的时候启动线程。

由于Java只支持单重继承,用这种方法定义的类不可再继承其他父类。

6、用Runnable()接口实现线程

- 首先设计一个实现Runnable接口的类;

- 然后在类中根据需要重写run方法;

- 再创建该类对象,以此对象为参数建立Thread 类的对象;

- 调用Thread类对象的start方法启动线程,将 CPU执行权转交到run方法。

7、线程的终止

-当线程的run方法执行方法体中最后一条语句后,或者出现了在run方法中没有捕获的异常时,线程将终止,让出CPU使用权。

- 调用interrupt()方法也可终止线程。

void interrupt()

– 向一个线程发送一个中断请求,同时把这个线程的“interrupted”状态置为true。

– 若该线程处于 blocked 状态 ,会抛出 InterruptedException。

8、测试线程是否被中断的方法

Java提供了几个用于测试线程是否被中断的方法。

-static boolean interrupted()

– 检测当前线程是否已被中断 ,并重置状态 “interrupted”值为false。 

-boolean isInterrupted()

– 检测当前线程是否已被中断 ,不改变状态 “interrupted”值 。

9、线程的状态

-利用各线程的状态变换,可以控制各个线程轮流使用CPU,体现多线程的并行性特征。 

-线程有如下7种状态:

➢ New (新建)

➢ Runnable (可运行)

➢ Running(运行)

➢ Blocked (被阻塞)

➢ Waiting (等待)

➢ Timed waiting (计时等待)

➢ Terminated (被终止)

10、新创建线程

-new(新建)

线程对象刚刚创建,还没有启动,此时线程还处于不可运行状态。例如: Thread thread=new Thread(r); 此时线程thread处于新建状态,有了相应的内存空间以及其它资源。

11、可运行线程

- runnable(可运行状态)

➢ 此时线程已经启动,处于线程的run()方法之中。

➢ 此时的线程可能运行,也可能不运行,只要 CPU一空闲,马上就会运行。

➢ 调用线程的start()方法可使线程处于“可运行”状态。例如: thread.start();

12、被阻塞线程和等待线程

- blocked (被阻塞)

➢ 一个正在执行的线程因特殊原因,被暂停执行, 进入阻塞状态。

➢ 阻塞时线程不能进入队列排队,必须等到引起阻塞的原因消除,才可重新进入排队队列。

➢ 引起阻塞的原因很多,不同原因要用不同的方法解除。

-sleep(),wait()是两个常用引起线程阻塞的方法。

13、线程阻塞的三种情况

- 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。

- 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。

-其他阻塞 -- 通过调用线程的sleep()或join() 或发出了I/O请求时,线程会进入到阻塞状态。当 sleep()状态超时、join()等待线程终止或者超 时、或者I/O处理完毕时,线程重新转入就绪状态。

14、被终止的线程

Terminated (被终止) 线程被终止的原因有二:

➢ 一是run()方法中最后一个语句执行完毕而自然死亡。

➢ 二是因为一个没有捕获的异常终止了run方法而意外死亡。

➢ 可以调用线程的 stop 方 法 杀 死 一 个 线 程(thread.stop();),但是,stop方法已过时, 不要在自己的代码中调用它。

15、多线程调度

-Java 的线程调度采用优先级策略:

➢ 优先级高的先执行,优先级低的后执行;

➢ 多线程系统会自动为每个线程分配一个优先级,缺省时,继承其父类的优先级;

➢ 任务紧急的线程,其优先级较高;

➢ 同优先级的线程按“先进先出”的队列原则;

第二部分:实验部分

1、实验目的与要求

(1) 掌握Java应用程序的打包操作;

(2) 掌握线程概念;

(3) 掌握线程创建的两种技术。

2、实验内容和步骤

实验1: 导入第13章示例程序,测试程序并进行代码注释。

测试程序1

elipse IDE中调试运行教材585页程序13-1,结合程序运行结果理解程序;

将所生成的JAR文件移到另外一个不同的目录中,再运行该归档文件,以便确认程序是从JAR文件中,而不是从当前目录中读取的资源。

掌握创建JAR文件的方法;

 1 package resource;
 2 
 3 import java.awt.*;
 4 import java.io.*;
 5 import java.net.*;
 6 import java.util.*;
 7 import javax.swing.*;
 8 
 9 /**
10  * @version 1.41 2015-06-12
11  * @author Cay Horstmann
12  */
13 public class ResourceTest
14 {
15    public static void main(String[] args)
16    {
17       EventQueue.invokeLater(() -> {
18          JFrame frame = new ResourceTestFrame();
19          frame.setTitle("ResourceTest");
20          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
21          frame.setVisible(true);
22       });
23    }
24 }
25 
26 /**
27  * A frame that loads image and text resources.
28  */
29 class ResourceTestFrame extends JFrame
30 {
31    private static final int DEFAULT_WIDTH = 300;
32    private static final int DEFAULT_HEIGHT = 300;
33 
34    public ResourceTestFrame()
35    {
36       setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
37       URL aboutURL = getClass().getResource("about.gif");  //ip地址的路径地址,资源加载代码
38       Image img = new ImageIcon(aboutURL).getImage();
39       setIconImage(img);
40 
41       JTextArea textArea = new JTextArea();
42       InputStream stream = getClass().getResourceAsStream("about.txt");
43       try (Scanner in = new Scanner(stream, "UTF-8"))
44       {
45          while (in.hasNext())
46             textArea.append(in.nextLine() + "\n");//显示
47       }
48       add(textArea);
49    }
50 }
ResourceTest

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-09
相关资源
相似解决方案