实验 (11) 项目名称: Java多线程机制
一、 实验报告内容一般包括以下几个内容:
- 实验项目名称 实验11 Java多线程机制
- 实验目的和要求
目的:
本实验的目的是让学生掌握Java多线程机制,学会两种不同的线程的创建方法。
要求:
编写两个程序:
(1) 利用Thread类实现在一个程序中同时完成如下两个任务,任务一:能将ASCII值为1到100对应的字符输出到控制台;任务二:能将1-100的数以数输出。要求尽量我们能看到他们交叉输出要求使用两种方法创建线程:Thread子类创建线程和Thread类直接创建线程对象(使用Runnable接口)。
(2) 假设有火车票100张,创建4个线程模拟4个售票点,每个售票点500毫秒卖一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。输出格式如下:
第4售票点卖出第89张票
第2售票点卖出第90张票
……
-
要求学生把源代码截图和结果截图提交给老师。
-
实验原理
-
主要仪器设备
(1)学生每人一台PC机;
(2)互联网环境。
实验解答:
demo1.java
package data20240516;
public class demo1 {
public static void main(String[] args) {
PrintChar printChar = new PrintChar();
PrintNum num = new PrintNum();
Thread printNum = new Thread(num);
printChar.start();
printNum.start();
}
}
PrintChar.java
package data20240516;
public class PrintChar extends Thread{
public void run()
{
for(int i=1;i<=100;++i)
{
System.out.printf("%c",(char)i);
}
}
}
PrintNum.java
package data20240516;
public class PrintNum implements Runnable{
public void run(){
for(int i=1;i<=100;++i)
{
System.out.printf("%d ",i);
}
}
}
demo2.java
package data20240516;
public class demo2 {
public static void main(String[] args) {
Sale sale = new Sale();
for(int i=1;i<=4;++i)
{
new Thread(sale,"第"+i+"售票点").start();
}
}
}
Sale.java
package data20240516;
public class Sale implements Runnable{
int ticket = 100;
int saled = 1;
Boolean flag = true;
public void run(){
while(flag){
saling();
try{
Thread.sleep(500);
}catch (InterruptedException e){
System.out.println("error");
}
}
}
public synchronized void saling()
{
if(saled<=ticket) {
System.out.printf(Thread.currentThread().getName()+"卖出第"+saled+"张票\n");
saled++;
}
else{
flag=false;
}
}
}