java--多线程

案例一:

gui:

package practice;

public class gui implements Runnable {
@Override
public void run() {
int race=100;
int x=(int)(Math.random()*5);
while(race>=0){
race=race-x;
System.out.println("乌龟还有"+race+"米到达终点!");
try {
Thread.sleep(1*1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("歇一歇");
}
}
System.out.println("乌龟到达终点!!!");
}

}

 rabit:

package practice;
public class rabit extends Thread {
@Override
public void run() {
int race=100;
int x=(int)(Math.random()*25);
while(race>=0){
race=race-x;
System.err.println("兔子还有"+race+"米到达终点!");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("休息一下");
}
}
System.err.println("兔子到达终点!!!");
}
}

test:

package practice;
public class testzhongdian {
public static void main(String[] args) {
gui gui=new gui();
rabit rabit=new rabit();
Thread t=new Thread(gui);
t.start();
rabit.start();
}
}


案例二:

DXX:

package test;


public class DXX extends Thread {


@Override
public void run() {
int race = 1000;
int x = (int) (Math.random()*100);
while(race >= 0) {
race -= x;
System.err.println("大猩猩还有"+race+"米就追到费玉清了,加油!");
try {
Thread.sleep(1*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.err.println("大猩猩追到费玉清了,祝你们幸福!");
}

}


FYQ:

package test;


public class FYQ implements Runnable {


@Override
public void run() {
int race = 1000;
int x = (int) (Math.random()*100);
while(race >= 0) {
race -= x;
System.out.println("费玉清还有"+race+"米就逃跑成功了!");
try {
Thread.sleep(1*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("费玉清逃跑成功了!");
}



}

test:

package test;
public class GYM {
public static void main(String[] args) {
FYQ fyq = new FYQ();
DXX dxx = new DXX();

Thread t1 = new Thread(fyq);
t1.start();
dxx.start();
}
}


案例三:

Number:

package test;


public class Number implements Runnable {


private String name; 

public Number(String name) {
this.name = name;
}

@Override
public void run() {
for(int i=0; i<=10; i++) {
System.out.println(name+"=="+i); //获得当前线程的名称
try {
Thread.sleep(1*1000); //线程睡眠,让线程进入阻塞状态,睡眠结束,重新进入准备状态
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("线程中断");
}
}
}


}

 NumberThread:

package test;


public class NumberThread extends Thread {


@Override
public void run() {
for(int i=0; i<=10; i++) {
if(i == 5) {
yield(); //线程让步,让出CPU的使用权
}
System.out.println(getName()+"=="+i); //获得当前线程的名称
}
}
}

test:

package test;


public class TestThead {


public static void main(String[] args) {
//进入新建状态
/* NumberThread th = new NumberThread();
//进入准备状态
th.start();

NumberThread th1 = new NumberThread();
th1.start();*/

Number num = new Number("线程1");
//进入新建状态
Thread th1 = new Thread(num); //创建线程对象
//进入准备状态
th1.start();

Number num1 = new Number("线程2");
//进入新建状态
Thread th2 = new Thread(num1); //创建线程对象
//进入准备状态
th2.start();
}

}

案例四:

Num:

package test1;


public class Num implements Runnable {


private String name;
private Resource res;


public Num(String name, Resource res) {
this.name = name;
this.res = res;
}


@Override
public void run() {
res.add(name);
}


}


Resource:

package test1;


public class Resource {

private int num;


public void add(String name) {

synchronized (name) {
num++;
System.out.println(name + "是第" + num + "个访问了该资源的方法");
}

}
}


TestResource:

package test1;
public class TestResource {


public static void main(String[] args) {
Resource res = new Resource(); //资源

Num n1 = new Num("哈哈哈", res);
Num n2 = new Num("嘿嘿嘿", res);

Thread th1 = new Thread(n1);
Thread th2 = new Thread(n2);

th1.start();
th2.start();
}


}


案例五:

Account :

package test3;
public class Account {


private int money;
private String name;


public Account(int money, String name) {
this.money = money;
this.name = name;
}


public int getMoney() {
return money;
}


public void setMoney(int money) {
this.money = money;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


}

DrawMoney :

package test3;


public class DrawMoney implements Runnable {


private int money; //要取的钱
private Account account;


public DrawMoney(int money, Account account) {
this.money = money;
this.account = account;
}


@Override
public void run() {
synchronized (account) {
if (account.getMoney() >= this.money) {
System.out.println("取款成功,取款金额" + this.money + "元");
account.setMoney(account.getMoney() - this.money);
} else {
System.out.println("取钱失败,金额不足");
}
}

}


}

Test:

package test3;
public class TestDraw {


public static void main(String[] args) {
Account acc = new Account(10000, "工商银行");//将其(acc)看成资源

DrawMoney me = new DrawMoney(10000, acc);   //acc是实例化的资源
Thread th1 = new Thread(me); //将me作为Thread target创建新的线程
th1.start();

DrawMoney myWife = new DrawMoney(10000, acc);
Thread th2 = new Thread(myWife);//将myWife作为Thread target创建新的线程
th2.start();
}
}



案例6:

Student :

package Test;

import java.io.Serializable;


public class Student implements Serializable{
private String name;
private int age;
private String cls;

public Student(String name, int age, String cls) {
this.name = name;
this.age = age;
this.cls = cls;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}


public String getCls() {
return cls;
}


public void setCls(String cls) {
this.cls = cls;
}


@Override
public String toString() {
return "姓名:"+this.name+",年龄:"+this.age+",班级:"+this.cls;
}



}

test:

package Test;


import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;


public class TestStudent {
public static void main(String[] args) {
Set<Student> stus=new HashSet<Student>();
Scanner sc=new Scanner(System.in);
for(int i=0;i<4;i++){
System.out.println("请输入姓名:");
String name=sc.next();
System.out.println("请输入年龄");
int age=sc.nextInt();
System.out.println("请输入班级:");
String cls=sc.next();
Student stu=new Student(name, age, cls);
stus.add(stu);
}
Iterator<Student> iter=stus.iterator();
while(iter.hasNext()){
Student stu = iter.next();
System.out.println(stu.toString());
}
System.out.println("正在存储学生信息,请稍等...");
saveStudent save=new saveStudent(stus);
Thread th=new Thread(save);
th.start();
}
}


saveStudent :

package Test;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.Set;


public class saveStudent implements Runnable {
private Set<Student> stus;

public saveStudent(Set<Student> stus) {
this.stus = stus;
}


@Override
public void run() {
try {
FileOutputStream fos = new FileOutputStream("C:/Users/Administrator/Workspaces/MyEclipse 8.5/2017.12.20/save.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(stus);
oos.close();
fos.close();
System.out.println("操作成功!");
} catch (Exception e) {
System.out.println("操作错误!");
e.printStackTrace();
}

}


}

LoadStudent :

package Test;

import java.io.FileInputStream;


import java.io.ObjectInputStream;
import java.util.Set;


public class LoadStudent extends Thread {
@Override
public void run() {
try {
FileInputStream fis=new FileInputStream("C:/Users/Administrator/Workspaces/MyEclipse 8.5/2017.12.20/save.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
Set<Student> sts = (Set<Student>) ois.readObject();
for(Student stu:sts){
System.out.println(stu.toString());
}

ois.close();
fis.close();
System.out.println("加载成功");
} catch (Exception e) {
System.out.println("加载失败!");
e.printStackTrace();
}

}
}


testSave :

package Test;
public class testSave {

/**
* @param args
*/
public static void main(String[] args) {
System.out.println("正在加载学生信息...");
LoadStudent load=new LoadStudent();
load.start();


}


}

案例7:

Car :

package rentReturn;


public class Car {
private String name;
private int price;
private int speed;


public Car(String name, int price, int speed) {
this.name = name;
this.price = price;
this.speed = speed;
}


public String getName() {
return name;
}




public void setName(String name) {
this.name = name;
}




public int getPrice() {
return price;
}




public void setPrice(int price) {
this.price = price;
}




public int getSpeed() {
return speed;
}




public void setSpeed(int speed) {
this.speed = speed;
}
}

 ICar:

package rentReturn;


public interface ICar {
public abstract void drive();
}

Audio:

package rentReturn;


public class Audio extends Car implements ICar {


public Audio(String name, int price, int speed) {
super(name, price, speed);
}


@Override
public void drive() {
System.out.println("audio");
}


}

BMW :

package rentReturn;


public class BMW extends Car implements ICar {


public BMW(String name, int price, int speed) {
super(name, price, speed);
}


@Override
public void drive() {

System.out.println("bmw");
}

}

BenZ :

package rentReturn;


public class BenZ extends Car implements ICar  {


public BenZ(String name, int price, int speed) {
super(name, price, speed);
}


@Override
public void drive() {
System.out.println("benz");

}



}

RentCar :

package rentReturn;


import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.List;
import java.util.Scanner;


public class RentCar implements Runnable {
private String carName;
private int day;
private List<Car> list;


public RentCar(String carName, int day, List<Car> list) {
this.carName = carName;
this.day = day;
this.list = list;
}


@Override
public void run() {
getCar(carName, day, list);


}


/**
* 租车

* @param carName
* @param list
*/
private void getCar(String carName, int day, List<Car> list) {
Scanner sc = new Scanner(System.in);
if ("AuDi".equals(carName)) {
Audio aud = null;
for (Car c : list) {
if ("AuDi".equals(c.getName())) {
aud = (Audio) c;
}
}
boolean feeFlag = true;
while (feeFlag) {
int totle = aud.getPrice() * day;
System.out.println("您应付" + totle + "千元");
System.out.println("请付款");
int fee = sc.nextInt(); // 付款金额
if (fee >= totle) {
saveCar(aud); //将车保存到本地磁盘
aud.drive();
feeFlag = false;
} else {
System.err.println("金额不正确,请重新输入");
}
}


} else if ("BMW".equals(carName)) {
BMW bmw = null;
for (Car c : list) {
if ("BMW".equals(c.getName())) {
bmw = (BMW) c;
}
}

boolean feeFlag = true;
while (feeFlag) {
int totle = bmw.getPrice() * day;
System.out.println("您应付" + totle + "千元");
System.out.println("请付款");
int fee = sc.nextInt(); // 付款金额
if (fee >= totle) {
saveCar(bmw); //将车保存到本地磁盘
bmw.drive();
feeFlag = false;
} else {
System.err.println("金额不正确,请重新输入");
}
}
} else if ("BenZ".equals(carName)) {
BenZ benz = null;
for (Car c : list) {
if ("BenZ".equals(c.getName())) {
benz = (BenZ) c;
}
}
boolean feeFlag = true;
while (feeFlag) {
int totle = benz.getPrice() * day;
System.out.println("您应付" + totle + "千元");
System.out.println("请付款");
int fee = sc.nextInt(); // 付款金额
if (fee >= totle) {
saveCar(benz); //将车保存到本地磁盘
benz.drive();
feeFlag = false;
} else {
System.err.println("金额不正确,请重新输入");
}
}
}
}
/**
* 将车保存到本地磁盘

*/
private void saveCar(Car car) {
try {
FileOutputStream fos = new FileOutputStream("C:/Users/Administrator/Workspaces/MyEclipse 8.5/rent and return the car/TEST.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(car);
oos.close();
fos.close();
} catch (Exception e) {
System.out.println("保存错误");
e.printStackTrace();
}
}

}

BackCar :

package rentReturn;


import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;


public class BackCar implements Runnable {


@Override
public void run() {
backCar();


}
private void backCar() {
File file = new File("C:/Users/Administrator/Workspaces/MyEclipse 8.5/rent and return the car/TEST.txt");
//判断磁盘中是否存在car.dat文件
if(file.exists()) { //存在
System.out.println("尊敬的客户您好,很感谢您能按时归还车辆");
try {
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);

Car car = (Car) ois.readObject();
System.out.println("车辆信息:"+car.toString());
ois.close();
fis.close();

file.delete(); //删除car.dat文件

System.exit(0); //退出系统
} catch (Exception e) {
System.out.println("文件读取异常");
e.printStackTrace();
}
} else {
System.out.println("您尚未租车,无需还车");
}
}
}

TestCar2:

package rentReturn;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class TestCar2{


public static void main(String[] args) {
Car audio = new Audio("AuDi", 4, 260);
Car bmw = new BMW("BMW", 2, 200);
Car benz = new BenZ("BenZ", 3, 210);


List<Car> list = new ArrayList<Car>(); //租车公司的集合
list.add(audio);
list.add(bmw);
list.add(benz);

Scanner sc = new Scanner(System.in);
boolean mainFlag = true;
while (mainFlag) {
System.out.println("客户您好!请问您是要:租车/还车");
String op = sc.next();
if ("租车".equals(op)) { // 租车
System.out.println("下面是我们公司提供的汽车");
print(list);
System.out.println("请问你要租哪个品牌的汽车?");
String opCar = sc.next();
System.out.println("请输入天数");
int day = sc.nextInt();

RentCar car=new RentCar(opCar, day, list);
Thread th=new Thread(car);
th.start();
//getCar(opCar, day, list);
} else if ("还车".equals(op)) { // 还车
System.out.println("还车");
BackCar bc=new BackCar();
Thread th=new Thread(bc);
th.start();
//backCar();
}
}
}
private static void print(List<Car> list) {
for (Car c : list) {
System.out.println(c.toString());
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值