实验报告七&&课程总结

Java实验报告

 

班级 计科二班 学号 20188450 姓名 李代传

完成时间 2019.10.22

评分等级

 

 

 

实验代码1

实验报告七&&课程总结_第1张图片

 

实验报告七&&课程总结_第2张图片

 

package 火车站售票程序;

 

public class Voting implements Runnable {

    private int votings=1000;

    @Override

    public void run() {

        // TODO Auto-generated method stub

        while(true) { //买票循环,不买完不结束。

        if(this.VotingMain()!=1) { //卖光票,结束线程。

            System.out.println(Thread.currentThread().getName()+"票已卖光");

            return;

        }

        try {

            Thread.yield(); //线程礼让,在睡眠一秒之前,买票之后。

            Thread.sleep(1000);

        }catch (InterruptedException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

         }

        }

    }

    public synchronized int VotingMain() { //同步方法。

        if(this.votings>=1) {

            this.votings--;

            System.out.println(Thread.currentThread().getName()+"购票成功!"+"剩余票数"+this.votings);

            return 1;

        }

        return 0;

    }

}

package 火车站售票程序;

 

public class Main {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Voting v=new Voting();

        for(int i=0;i<10;i++) {

            new Thread(v).start();//创建十个线程并直接让线程就绪

        }

    }

 

}

 

 

实验结果

依此类推->

Thread-2购票成功!剩余票数40

Thread-5购票成功!剩余票数39

Thread-9购票成功!剩余票数38

Thread-7购票成功!剩余票数37

Thread-0购票成功!剩余票数36

Thread-3购票成功!剩余票数35

Thread-6购票成功!剩余票数34

Thread-2购票成功!剩余票数33

Thread-4购票成功!剩余票数32

Thread-1购票成功!剩余票数31

Thread-8购票成功!剩余票数30

Thread-9购票成功!剩余票数29

Thread-5购票成功!剩余票数28

Thread-0购票成功!剩余票数27

Thread-7购票成功!剩余票数26

Thread-3购票成功!剩余票数25

Thread-6购票成功!剩余票数24

Thread-8购票成功!剩余票数23

Thread-4购票成功!剩余票数22

Thread-1购票成功!剩余票数21

Thread-2购票成功!剩余票数20

Thread-9购票成功!剩余票数19

Thread-5购票成功!剩余票数18

Thread-0购票成功!剩余票数17

Thread-7购票成功!剩余票数16

Thread-3购票成功!剩余票数15

Thread-6购票成功!剩余票数14

Thread-4购票成功!剩余票数13

Thread-2购票成功!剩余票数12

Thread-1购票成功!剩余票数11

Thread-8购票成功!剩余票数10

Thread-5购票成功!剩余票数9

Thread-9购票成功!剩余票数8

Thread-0购票成功!剩余票数7

Thread-7购票成功!剩余票数6

Thread-3购票成功!剩余票数5

Thread-6购票成功!剩余票数4

Thread-2购票成功!剩余票数3

Thread-8购票成功!剩余票数2

Thread-4购票成功!剩余票数1

Thread-1购票成功!剩余票数0

Thread-9票已卖光

Thread-5票已卖光

Thread-0票已卖光

Thread-7票已卖光

Thread-3票已卖光

Thread-6票已卖光

Thread-2票已卖光

Thread-1票已卖光

Thread-8票已卖光

Thread-4票已卖光

 

 

实验总结

很多同学反应启动不了多线程,我虽然没碰到无法执行多线程的情况。但是我借用了一个不能执行多线程的代码,多次修改后,发现可能是因为Thread.Sleep(1000)的放置的问题。具体情况如下:如果放在了同步(synchronized)方法中,在Run()方法循环中调用此方法,就会出现一直是一个线程输出的情况。如果此时在Run()方法中加入Thread.Sleep(),就能看到其他线程的输出了。

对于以上情况,我又想到了老师上课的那段代码,虽然也是放在(synchronized)同步代码块中,但是依旧是放在Run()方法中。

所以,是不是如果要用这个Thread.Sleep()的时候,必须要放在Run()方法中才能看到多个线程的输出呢?

 

课程总结

近期我们上课氛围很差,使得老师不能像以前一样全力教导我们。但是我还是按自己的步伐去学习,专心听讲。这上一节课的File类,上课时虽然看懂了,但是实际操作肯定会有很多问题。所以也得自己多去操作,用一用类里的方法,以便自己熟悉。

你可能感兴趣的:(实验报告七&&课程总结)