韩顺平java编程练习题

编程题 1.在main方法中启动两个线程;在第一个线程中循环打印1-100的数字;直到第二个线程从键盘中读取“Q”命令

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Scanner;

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

        print print = new print();
        keyget keyget = new keyget(print);
print.start();
keyget.start();

    }
}
class print extends Thread{
    private boolean loop=true;

    public void setLoop(boolean loop) {
        this.loop = loop;
    }
int i=1;
    @Override
    public void run() {
        while (loop){
            System.out.println(i++);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }}

    }


class keyget extends Thread {
    private print p;

    public keyget(print p) {
        this.p = p;
    }
  private   Scanner scanner = new Scanner(System.in);
    @Override
    public void run() {


        System.out.println("线程二在执行,键盘处于监听状态");
char key=scanner.next().toUpperCase().charAt(0);
//toUpperCase()返回输入字母的大写,charAt(0)找出第一个输入的字母

if(key=='Q') {
    p.setLoop(false);
    System.out.println("输入正确,你将要推出");

    for (int i = 5; i >=0 ; i--) {
        System.out.println("倒计时"+i);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    System.out.println("B线程退出");

}

    }


}

用Rnnuable方式创建线程的实现

package JAVAthread_text;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Scanner;

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

        print print = new print();
        Thread thread = new Thread(print);
        keyget keyget = new keyget(print);
        Thread thread1 = new Thread(keyget);
        thread.start();thread1.start();


    }
}
class print implements Runnable{
    private boolean loop=true;

    public void setLoop(boolean loop) {
        this.loop = loop;
    }
int i=1;
    @Override
    public void run() {
        while (loop){
            System.out.println(i++);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }}

    }


class keyget implements Runnable {
    private print p;

    public keyget(print p) {
        this.p = p;
    }
  private   Scanner scanner = new Scanner(System.in);
    @Override
    public void run() {


        System.out.println("线程二在执行,键盘处于监听状态");
char key=scanner.next().toUpperCase().charAt(0);
//toUpperCase()返回输入字母的大写,charAt(0)找出第一个输入的字母

if(key=='Q') {
    p.setLoop(false);
    System.out.println("输入正确,你将要推出");

    for (int i = 5; i >=0 ; i--) {
        System.out.println("倒计时"+i);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    System.out.println("B线程退出");

}

    }


}

编程题2.

有两个用户分别从同一张卡取钱(余额为10000); 每次都取1000,当余额不足时,不能取款了;不能出现超取的现象,线程同步问题

import java.util.Random;

public class text02 {
    public static void main(String[] args) {
        count count = new count();
        
        Thread thread = new Thread(count);
        Thread thread01 = new Thread(count);
thread.setName("爸爸");
thread01.setName("妈妈");
thread.start();
thread01.start();
    }
}
class count implements Runnable{



    private  static int money=10000;
    @Override
    public void run() {
       while (money>0){

          int getmoney=(int) (Math.random()*9999+1);

        synchronized (this){
            try {if(money-getmoney<0)
                continue;
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            money=money-getmoney;
            System.out.println(Thread.currentThread().getName()+"拿了"+getmoney+"余额为"+money);

        }
    }
}}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值