Java実験7マルチスレッド同時実験(終了していません)

実験内容    

1(タイトル番号7179)、マルチスレッド技術を使用して、カメとウサギのレースをシミュレートするプログラムを作成します。要件は次のとおりです。(1)カメは毎回1ユニット、ウサギは毎回10ユニットを実行します。 ;(2)各スレッドが実行されると、終点に到達したかどうかを判断し、終点に到達した場合はプロンプトメッセージが表示されます。終点に到達しなかった場合は、終点からの現在の距離がプロンプトされます。 (3)うさぎが先にいる場合は、「速く走り、よく眠れます」というメッセージが表示され、しばらく眠ります。

2(トピック番号8690)、単一プランクの橋を渡る複数の人のシミュレーションをシミュレートするマルチスレッドアプリケーションプログラムを作成します。片板橋を一度に通過できるのは1人だけです。木製橋を通過する時間は5秒で、ランダムに10人が生成されます。同時に、単板橋を渡る準備をして、毎回一枚橋を通過する人の名前を表示します。ランダムな番号が必要です。

3(タイトル番号7180)、ハルビン駅の下には、ハルビン駅、ハドン駅、ハクシ駅の3つの列車チケット販売所があります。ハルビンから北京までの列車チケットの総数が200である場合、使用方法3枚のチケット販売を実現するプログラムチケットを同時に販売する機能をクリックします。注:チケットの繰り返し販売の問題を回避するために、スレッド同期の問題を考慮してください。同期の問題を考慮する必要があります。


public class Test7179 extends Thread{
    /*
1(题目编号7179)、利用多线程技术编写一个模拟龟兔赛跑的程序,要求如下:(1)乌龟每次跑一个单位,兔子每次跑10个单位;
(2)每个线程运行时,判断是否达到终点,如果到达终点,给出提示信息,未到终点则提示目前距离终点的距离,并判断是否领先;
(3)如果兔子领先,则显示“我跑得快,睡一觉”信息,并睡一会。
     */
    private int distance=100;
    static int rubdistance=0;
    static int turdistance=0;
    static boolean flag=true;
    public void run(){
        while(flag){
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            String name=Thread.currentThread().getName();
            if(name.equals("兔子")){
                rubdistance+=10;
                if(rubdistance>turdistance&&rubdistance<distance){
                    System.out.println(name+"还剩"+(distance-rubdistance)+"米");
                    System.out.println("我跑得快先睡一觉");
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                else{
                    System.out.println(name+"还剩"+(distance-rubdistance)+"米");
                }
                if(rubdistance==distance){
                    System.out.println(name+"到达了终点,比赛结束!");
                    flag=false;
                    break;
                }
                if(!flag){
                    System.out.println("兔子输了");
                }
            }
            if(name.equals("乌龟")){
                turdistance+=1;
                if(!flag){
                    System.out.println("乌龟输了");
                }
                else{
                    System.out.println(name+"还剩"+(distance-turdistance)+"米");

                }
                if(turdistance==distance&&flag){
                    System.out.println("乌龟到达了终点,比赛结束!");
                    flag=false;
                    break;
                }
            }

        }
    }
    public static void main(String[] args) {
        Test7179 rubbit=new Test7179();
        rubbit.setName("兔子");
        Test7179 turtle=new Test7179();
        turtle.setName("乌龟");
        rubbit.start();
        turtle.start();

    }

}

 

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class singlebridge implements Runnable{

    @Override
    public void run() {
        synchronized (this){
            System.out.println(Thread.currentThread().getName()+"开始过桥");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"已过桥");
        }
    }
}
public class Test8690 extends Thread {
    /*编写多线程应用程序,模拟多人过独木桥的模拟。独木桥每次只能通过一个人,每个人通过木桥的时间为5秒,随机生成10个人,
    同时准备过此独木桥,显示一下每次通过独木桥人的姓名。需要用到随机数。
     */
    public static void main(String[] args) {
        int N=10;
        singlebridge s=new singlebridge();
        List<Thread>threads=new ArrayList<>();
        for(int i=0;i<10;i++){
            threads.add(new Thread(s,"name"+i));
        }
        Random random=new Random();
        while(threads.size()>0){
            int index=random.nextInt(threads.size());
            threads.get((index)).start();
            threads.remove(index);
        }

    }
}
/*3(题目编号7180)、哈尔滨火车站下面有三个火车票代售点:哈站、哈东站、哈西站
,假如哈尔滨到北京的火车票总共是200张,如何用程序来实现三个售票点同时卖票的功能。注意:考虑线程同步问题,
避免出现重复卖票问题。需要考虑同步问题。
 */
class Ticket implements Runnable{
    boolean flag=true;
    int ticketCount=200;//总票数
    @Override
    public void run() {
        while(flag){//循环让线程不停买票
            synchronized (this){//锁线程
                if(ticketCount>0) {
                    ticketCount--;
                    System.out.println(Thread.currentThread().getName() + "正在卖出一张票,还剩" + ticketCount + "张票");
                    if (ticketCount == 0) {
                        System.out.println("今天得票卖光了");
                        flag = false;
                        break;
                    }
                }
            }
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}
public class Test7180 {
    public static void main(String[] args) {
        Ticket ticket=new Ticket();
        //建立三个卖票线程;
        Thread haxi=new Thread(ticket);
        haxi.setName("哈西");
        Thread hadong=new Thread(ticket);
        hadong.setName("哈东");
        Thread hazhan=new Thread(ticket);
        hazhan.setName("哈站");
        haxi.start();
        hazhan.start();
        hadong.start();
    }

}

おすすめ

転載: blog.csdn.net/qq_56350439/article/details/124459993