这是刚学线程的时候,使用线程做的题目,关于存取钱以及卖票系统
两者都很简单,卖票系统代码如下
public class Testcode extends Thread{
public Testcode(String name){
super(name);
}
static int ticket=30;
static Object ob="a";
public void run(){
while(ticket>0){
synchronized(ob){
if(ticket>0){
System.out.println(getName()+"卖出了第"+ticket+"张票");
ticket--;
}
else{
System.out.println("票卖完了");
}
}
try{
sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Testcode st1=new Testcode("窗口1");
Testcode st2=new Testcode("窗口2");
st1.start();
st2.start();
}
}
存取钱题目的主代码,使用synchronized是为了确保一次只有一个人进行操作
public class bank extends Thread{
private static int money;
public static int getm() {
return money;
}
public void savemoney(int m) {
synchronized (this) {
money= m + money;
System.out.println("存钱后为:" + money);
}
}
public void getmoney(int m) {
synchronized (this) {
if (bank.getm()<= 0) {
System.out.println("取钱失败,余额不足");
}
else {
money = money-m;
System.out.println("取钱后为:" + money);
}
}
}
public static void main(String[] args) {
cun c1=new cun();
cun c2=new cun();
qu q1=new qu();
qu q2=new qu();
c1.start();
c2.start();
q1.start();
q2.start();
}
}
接下来的代码是存取钱的代码,都很简单
public class qu extends Thread{
private bank bank=new bank();
public void run(){
int m=100;
int i=0;
while(i<5){
bank.getmoney(m);
try{Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
i++;
}
}
}
public class cun extends Thread {
private bank bank=new bank();
public void run(){
int m=100;
int i=0;
while(i<5){
bank.savemoney(m);
i++;
try{Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}}
}
}