欢迎光临散文网 会员登陆 & 注册

Java线程:火车站购票,银行存钱,收取停车费,模拟员工制作工艺品【诗书画唱】

2020-07-24 23:48 作者:诗书画唱  | 我要投稿

使用多线程模拟火车站购票问题


package thread;


public class huoCheZhan {



public static void main(String[] args) {

//用New创建多个窗口对象:


TicketClass TicketClass=new TicketClass();


Thread Thread1=new Thread(TicketClass);


Thread1.setName("窗口1");


Thread Thread2=new Thread(TicketClass);


Thread2.setName("窗口2");


Thread Thread3=new Thread(TicketClass);


Thread3.setName("窗口3");


//用start启动多线程对象:


Thread1.start();


Thread2.start();


Thread3.start();


}


}


class TicketClass implements Runnable {

int num=1;

int zongPiaoShu=99;


public void run() {


while(true) {


if(zongPiaoShu>0) {

synchronized (this) {

try {


Thread.sleep(100);


} catch (InterruptedException e) {


// TODO 自动生成的 catch 块


e.printStackTrace();


}

if(zongPiaoShu>=0){

System.out.println(Thread.currentThread()

.getName()+"买出了第"+(num++)+"张票, 还剩"+(zongPiaoShu--)+"张票没买出去");

}

}

}

}


}


}











模拟用户去银行存钱

/**

 * 需求:有两个储户同时到一个银行去存钱,每人存3次,

 * 每次存100元。

 * 要求打印出银行每次金额的变化情况(假设银行没钱)

 * 

 * 分析:得出有两个类:银行和储户

 * 这是一个多线程的问题,如何分析他的线程安全问题呢?

 * 1.通过线程的任务代码分析。

 * 2.有没有共享数据,有没有多条语句在操作共享数据。

 * */




package thread;


class Bank{

// moneySum:钱的总数

private int moneySum = 0;

// cunRuMoneyNum:每次存入的钱

public void add(int cunRuMoneyNum){

moneySum = moneySum + cunRuMoneyNum;

System.out.println(Thread.currentThread()

.getName()+

"向银行存了100元,银行现在有"

+moneySum+"元");

}

}

 

class Customer implements Runnable{

 

Bank yingHang = new Bank();

Object guKe = new Object();

 

@Override

public void run() {

synchronized (guKe) {

for(int i = 0;i<3;i++){

yingHang.add(100);

// 100:每次存入的100元钱

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

 

public class blank {

public static void main(String[] args) {

Customer CustomerClass = new Customer();


Thread Thread1 = 

new Thread(CustomerClass,"诗书画唱");

Thread Thread2 =

new Thread(CustomerClass,"三连关注");


Thread1.start();

Thread2.start();

}

}









小区收取停车费


package thread;


class ParkClass{

// moneySum:钱的总数

private int moneySum = 0;

// cunRuMoneyNum:每次停车交的钱

public void add(int cunRuMoneyNum){

moneySum = moneySum + cunRuMoneyNum;

System.out.println(Thread.currentThread()

.getName()+

"停车了,交100元 ,停车场现在有"

+moneySum+"元");

}

}

 

class CarCLass implements Runnable{

 

parkChangClass parkChangClass

= new parkChangClass();

Object carZhuRen = new Object();

// carZhuRen:车的主人

@Override

public void run() {

synchronized (carZhuRen) {

for(int i = 0;i<3;i++){

parkChangClass.add(100);

// 100:每次存入的100元钱

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

 

public class tingChe {

public static void main(String[] args) {

Customer car = new Customer();


Thread Thread1 = 

new Thread(car,"诗书画唱车");

Thread Thread2 =

new Thread(car,"三连关注车");

Thread Thread3 = 

new Thread(car,"6666车");

Thread Thread4 =

new Thread(car,"2333车");

Thread1.start();

Thread2.start();

Thread3.start();

Thread4.start();

}

}






模拟员工制作工艺品,工艺品数量达到1000个以后不再制作



package thread;

import java.util.Random;

public class yuanGong {


public static void main(String[] args) throws Exception{


gongYiPinClass gongYiPinClass=new gongYiPinClass() ;


// 下面是省了重命名的部分,直接new实例化:

new Thread(gongYiPinClass, "诗书画唱的好员工").start();

new Thread(gongYiPinClass, "三连关注的好员工").start();

new Thread(gongYiPinClass,"2333的好员工").start();


}

}


class gongYiPinClass implements Runnable{

static int gongYiPinNum=999;

static int num=1;

public void run() {


while(gongYiPinNum>0){


synchronized (this) {


try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



if(gongYiPinNum>=0){

System.out.println(Thread.currentThread()

.getName()+"做出了第"+(num++)+"个工艺品,"

+ "\n还有"+(gongYiPinNum--)+"个工艺品没做完");

}

// gongYiPinNum--;

}

}

}


}





用Java多线程模拟停车场停车和停车场满了,车离开等的情形:

package thread;

 

class Park

{


// park:停车场

boolean  []park=new boolean[3];

public boolean equals()

{

return true;

}


}

class Car

{

private String number;

// position:位置

private int position=0;

public Car(String number)

{

this.number=number;

}

public void setNumber(String number)

{

this.number=number;

}

public String getNumber()

{

return number;

}

public void setPosition(int i)

position=i;

}

public int getPosition()

{

return position;

}

public int hashCode()

{

return number.hashCode();

}


// duiXiang:车等的对象

public boolean equals(Object duiXiang)

{

if(duiXiang==this)

return true;

if(duiXiang!=null&&duiXiang.getClass()

==Car.class)

{

Car Car=(Car)duiXiang;

return Car.number==this.number;

}

return false;

}

}

 

class ParkCar implements Runnable

{

Car Car;

Park Park;

public ParkCar(Car Car,Park Park)

{

this.Car=Car;

this.Park=Park;

}

@Override

public void run()

{

while(true)

{

int i=0;

synchronized(Park)

{

if(Car.getPosition()==0)

{

for(i=0;i<Park.park.length;i++)

{

if(Park.park[i])

{

continue;

}

else

{

System.out.println(Car.getNumber()+"车,成功停在"

+(i+1)+"号停车位上");

Park.park[i]=true;

Car.setPosition(i);

break;

}

}

if(i==3)

System.out.println

(Car.getNumber()+"车,停车失败"

+",因为停车场车位已满 "

);

}



try

{

Thread.sleep(100);

}

catch(InterruptedException ie)

{

ie.printStackTrace();

}

}


synchronized(Park)

{

if(Car.getPosition()!=0)

{

Park.park[Car.getPosition()]=false;

Car.setPosition(0);

System.out.println(Car.getNumber()

+"车,已离开停车场");


}

try

{

Thread.sleep(100);

}

catch(InterruptedException ie)

{

ie.printStackTrace();

}

}


}

}

}

public class tingCheChang {

public static void main(String []args)

{

Park Park=new Park();

Car Car1=new Car("诗书画唱号");

Car Car2=new Car("2333号");

Car Car3=new Car("6666号");

Car Car4=new Car("8888号");

Car Car5=new Car("三连关注号");

new Thread (new ParkCar(Car1,Park)).start();

new Thread (new ParkCar(Car3,Park)).start();

new Thread (new ParkCar(Car4,Park)).start();

new Thread (new ParkCar(Car5,Park)).start();

new Thread (new ParkCar(Car2,Park)).start();


}

 

}




Java线程:火车站购票,银行存钱,收取停车费,模拟员工制作工艺品【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律