编程题 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);
}
}
}}