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

第九周课程总结

一、Runnable接口相对于Thread类的优势。

(1)适合多个相同程序代码的线程去处理同一资源的情况;

(2)可以避免由于Java的单继承特性所带来的的局限;

(3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。

二、线程的状态

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

三、线程操作的主要方法:

序号 方法名称 类型 描述
1 public Thread(Runnable target) 构造 接收Runnable接口子类对象,实例化Thread对象
2 public Thread(Runnable target,String name) 构造 接收Runnable接口子类对象,实例化Thread对象,并设置线程名称
3 public Thread(String name) 构造 实例化Thread对象,并设置线程名称
4 public static Thread currentThread() 普通 返回正在执行的线程
5 public final String getName() 普通 返回线程的名称
6 public final int getPriority() 普通 发挥线程的优先级
7 public boolean isInterruped() 普通 判断线程是否被中断,如果是,返回true;否则,返回false
8 public final boolean isAlive() 普通 判断线程是否在活动,如果是,返回true;否则,返回false
9 public final void join() throws InterruptedException 普通 等待线程死亡
10 public final synchronized void join(long millis) throws InterruptedException 普通 等待millis毫秒后,线程死亡
11 public void fun() 普通 执行线程
12 public final void setName(String name) 普通 设置线程名称
13 public final void setPriority(int newPriority) 普通 设定线程的优先值
14 public static void sleep(long millis) throws InterruptedException 普通 使目前正在执行的线程休眠millis毫秒
15 public void start() 普通 开始执行线程
16 public String toString() 普通 返回代表线程的字符串
17 public static void yield() 普通 将正在执行的线程暂停,允许其他线程执行
18 public final void setDaemon(boolean on) 普通 将一个线程设置成后台运行

四、线程的优先级

Java的线程中使用setPriority()方法可以设置一个线程的优先级

序号 定义 描述 表示的常量
1 public static final int MIN_PRIORITY 最低优先级 1
2 public static final int NORM_PRIORITY 中等优先级,是线程的默认优先级 5
3 public static final int MAX_PRIORITY 最高优先级 10

五、Java IO

File

定义:

(1)在整个IO包中,唯一表示与文件本身有关的类就是File类。

(2)使用File类可以进行创建或删除文件等常用操作。

(3)要想使用File类则首先要观察File类的构造方法。

File类的构造方法

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

File类中的主要方法和常量

实例操作:创建一个新文件

实例操作:删除一个指定的文件

六、程序的问题:

(1)Windows中使用反斜杠表示目录的分隔符:“”

(2)Linux中使用正斜杠表示目录的分隔符:”/“

七、操作延迟

在每一次程序执行完毕之后,文件并不会立刻被创建或删除,会有一些延迟,这是因为所有的操作都需要通过JVM完成所造成的的。如下图所示:

实验报告(七)

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

要求:

(1)总票数1000张;

(2)10个窗口同时开始卖票;

(3)卖票过程延时1秒钟;

(4)不能出现一票多卖或卖出负数号票的情况。

实验源代码

卖票系统

package dijiuzhou;
class Mp implements Runnable{
	private long n=1000;
	public long getN() {
		return n;
	}
	public void setN(long n) {
		this.n = n;
	}
	public void run() {
		for(int i=0;i<1000;i++) {
			synchronized(this) {
				if(n==0) {
					System.out.println(Thread.currentThread().getName()+"票已卖完");
					break;
				}
				if(n>0) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+"卖票:"+"当前票数:n="+n--);
				}
			}
		}
	}
	
}

测试

package dijiuzhou;

public class Test {

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

}

运行截图










自我评价

对于这次实验报告,自我感觉还可以,可能是因为老师讲过,再加上书上也有一个类似的,所以做起来并不吃力。

原文地址:https://www.cnblogs.com/lcbxhda/p/11738632.html