多线程作业
一
- 在main方法中启动两个线程,
- 让第一个线程循环随机打印1-100内个整数
- 直到第二个线程从键盘读取到"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);
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) {
this.loop1 = loop1;
}
}
class B1 extends Thread{
private A1 a ;
private Scanner scanner= new Scanner(System.in);
public B1(A1 a){
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;
}
}
}
}
二
- 有两个用户分别从同一个卡上取钱,总额10000
- 每次取1000,当余额不足时不能取款了
- 注意:不能出现超取现象=>线程同步问题
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();
}
}
}