习题1
(1)在main方法中启动两个线程
(2)第1个线程循环随机打印100以内的整数(3)直到第2个线程从键盘读取了“Q”命令。
代码
package program;
import java.util.Random;
import java.util.Scanner;
public class Homewor01 {
public static void main(String[] args) {
H1 h1 = new H1();
Thread thread = new Thread(h1);
thread.start();
H2 h2 = new H2(h1);
Thread thread2 = new Thread(h2);
thread2.start();
}
}
class H1 implements Runnable{
private boolean loop = true;
public void print() {
}
@Override
public void run() {
while (loop) {
Random random = new Random();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println( random.nextInt(100));
}
}
public void setLoop(boolean loop) {
this.loop = loop;
}
public boolean isLoop() {
return loop;
}
}
class H2 implements Runnable{
private boolean loop = true;
private H1 h1;
public void conrolH1() {
while (true){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符(Q):");
String str = scanner.next();
if (str.toUpperCase().charAt(0) == 'Q') {
System.out.println("H2结束任务");
h1.setLoop(false);
System.out.println(h1.isLoop());
loop = false;
break;
}
}
}
@Override
public void run() {
while (loop) {
conrolH1();
}
}
public H2(H1 h1) {
this.h1 = h1;
}
}
运行结果
习题2
(1)有2个用户分别从同一个卡上取钱(总额:10000)(2)每次都取1000,当余额不足时,就不能取款了(3)不能出现超取现象
代码
package program;
public class Homewor02 {
public static void main(String[] args) {
J j = new J();
j.start();
J j2 = new J();
j2.start();
}
}
class J extends Thread {
private static double money = 10000;
private boolean loop = true;
public synchronized void withdraw() {
if (money <= 0){
System.out.println("没钱可取了,请充值!!!");
loop = false;
return;
}
try {
Thread.sleep(500);
} catch (Exception e) {
throw new RuntimeException(e);
}
money -= 1000;
System.out.println(Thread.currentThread().getName() + "取了1000元 剩余" + money) ;
}
@Override
public void run() {
while (loop) {
withdraw();
}
}
}