





import java.util.Scanner;
/*
在main方法中启动两个线程
第一个线程循环随机打印100以内的整数
直到第二个线程从键盘读取"Q"命令 停止
*/
public class ThreadExe {
public static void main(String[] args) {
A a = new A();
B b = new B(a);
b.start();
a.start();
}
}
class A extends Thread{
private boolean loop = true;
@Override
public void run() {
while (loop){
System.out.println((int)(Math.random() * 100 + 1));//随机输出1-100
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("A线程退出");
}
public void setLoop(boolean loop){//修改loop
this.loop = loop;
}
}
class B extends Thread{
private A a;
Scanner scanner = new Scanner(System.in);
public B(A a) {//传入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.setLoop(false);//a线程退出
System.out.println("B线程退出");
break;//b线程退出
}
}
}
}
/*
两个用户分别从同一张卡里取钱,总10000元
每次都取1000,当余额不足时停止取款
*/
public class ThreadExe02 {
public static void main(String[] args) {
M m = new M();
Thread m1 = new Thread(m);
Thread m2 = new Thread(m);
m1.start();
m2.start();
}
}
//共享资源,使用实现Runnable接口方式
class M implements Runnable{
private static int money = 10000;
@Override
public void run() {
while (true){
synchronized (this) {
if (money < 1000) {
System.out.println("余额不足");
break;
}
money -= 1000;
System.out.println(Thread.currentThread().getName() + "取出了1000,余额为" + money);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
/*
主线程每隔1秒输出1次hello,共10次
当输出到第五次hello时,启动子线程,每隔1s输出hi,输出10次后退出
主线程继续输出hello,直到退出
*/
public class ThreadExe03 {
public static void main(String[] args) throws InterruptedException {
Thread h = new Thread(new H());
for (int i = 1;i <= 10;i++){
System.out.println("hello," + i);
if (i == 5){
h.start();
h.join();
}
Thread.sleep(1000);
}
}
}
class H implements Runnable{
private int count = 0;
@Override
public void run() {
while (true){
System.out.println("hi," + (++count));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (count == 10){
break;
}
}
}
}