第九周课程总结&实验报告(七)
实验任务详情:
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
实验代码:
package project7;
class MyThread implements Runnable{
private int ticket=1000;
public void run() {
for(int i=0;i<1000;i++) {
this.sell();
}
}
public synchronized void sell() {
if(ticket>0) {
try {
Thread.sleep(1000);
}
catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"剩余:"+ticket--);
}
}
};
public class Ticket {
public static void main(String[] args) {
MyThread mt1=new MyThread();
new Thread(mt1,"窗口1").start();
new Thread(mt1,"窗口2").start();
new Thread(mt1,"窗口3").start();
new Thread(mt1,"窗口4").start();
new Thread(mt1,"窗口5").start();
new Thread(mt1,"窗口6").start();
new Thread(mt1,"窗口7").start();
new Thread(mt1,"窗口8").start();
new Thread(mt1,"窗口9").start();
new Thread(mt1,"窗口10").start();
}
}
运行截图:(由于运行结果太长,无法全部截图下来,所以选了开头和结尾两张)
本周学习总结:
Java中线程的实现方法:
(1).继承Tread类。
(2).实现Runnable接口。 (可实现资源共享)
线程操作的主要方法:
String getName() 返回该线程的名称。
void setName(String name) 改变线程名称,使之与参数 name 相同。
int getPriority() 返回线程的优先级。
void setPriority(int newPriority) 更改线程的优先级。
boolean isDaemon() 测试该线程是否为守护线程。
void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。
static void sleep(long millis). 使目前正在执行的线程休眠millis秒。
void interrupt() 中断线程。
static void yield() 暂停当前正在执行的线程对象,并执行其他线程。
void join() 等待该线程终止。
从Object类继承来的方法 void notify() void wait()
yield与join的区别:
yield方法:
它也是Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程,它只是将该线程转入到就绪状态。
也就是线程的礼让,其他线程先执行。
join()方法:
强制执行自己,其他线程无法执行。