多线程作业

多线程作业

  1. 在main方法中启动两个线程,
  2. 让第一个线程循环随机打印1-100内个整数
  3. 直到第二个线程从键盘读取到"Q"命令
package com.jinJie.synchronized1;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import org.omg.CORBA.INTERNAL;

import java.util.Scanner;

public class Homework01 {
    public static void main(String[] args) {

        A1 a = new A1();
        B1 b1 = new B1(a);//一定要注意把a1对象传给B,否则无法控制它
        new Thread(a).start();
        b1.start();




    }
}
class A1 implements Runnable{
    private boolean  loop1=true;
    @Override
    public void run() {
        while(loop1){
            System.out.println((int)(Math.random() * 100+1));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("a线程退出");
}
    public void setLoop1(boolean loop1) {//获取loop1
        this.loop1 = loop1;
    }
}

class B1 extends Thread{
    private A1 a ;
    private Scanner scanner= new Scanner(System.in);

    public B1(A1 a){//构造器直接传入A1类对象
        this.a=a;
    }

    @Override
    public void run() {
        // 接收用户的输入
        while(true){
        System.out.println("请输入你的指令Q表示退出: ");
        char key = scanner.next().toUpperCase().charAt(0);
            if (key =='Q'){
                a.setLoop1(false);
                System.out.println("B1线程退出");
                break;
            }
        }
    }
}


  1. 有两个用户分别从同一个卡上取钱,总额10000
  2. 每次取1000,当余额不足时不能取款了
  3. 注意:不能出现超取现象=>线程同步问题
package com.jinJie.synchronized1;

public class Homework02 {
    public static void main(String[] args) {
        yue yue = new yue();
        new Thread(yue).start();
        new Thread(yue).start();
    }
}
class yue implements Runnable{
    private static  int total=10000;
    boolean loop =true;
    public void setLoop(boolean loop) {
        this.loop = loop;
    }
    public  synchronized void a3(){

        if (total<=0){
            setLoop(false);
            System.out.println("余额不足");
            return;
        }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        System.out.println(Thread.currentThread().getName()+"用户取了1000"+"目前还剩"+(total-=1000));
    }
    @Override
    public void run(){

        while(loop){
            a3();
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玥骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值