Java上机实验报告(11)

实验 (11) 项目名称: Java多线程机制

一、 实验报告内容一般包括以下几个内容:

  1. 实验项目名称 实验11 Java多线程机制
  2. 实验目的和要求
    目的:
    本实验的目的是让学生掌握Java多线程机制,学会两种不同的线程的创建方法。
    要求:
    编写两个程序:
    (1) 利用Thread类实现在一个程序中同时完成如下两个任务,任务一:能将ASCII值为1到100对应的字符输出到控制台;任务二:能将1-100的数以数输出。要求尽量我们能看到他们交叉输出要求使用两种方法创建线程:Thread子类创建线程和Thread类直接创建线程对象(使用Runnable接口)。
    (2) 假设有火车票100张,创建4个线程模拟4个售票点,每个售票点500毫秒卖一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。输出格式如下:
4售票点卖出第89张票
第2售票点卖出第90张票
 ……
  1. 要求学生把源代码截图和结果截图提交给老师。

  2. 实验原理

  3. 主要仪器设备
    (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;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值