案例1:
第一个线程输出1,2,3,4,5
第二个线程输出6,7,8,9,10
第三个线程输出11,12,13,14,15
第一个线程输出16,17,18,19,20
第二个线程输出..........
第三个线程输出........
直到输入75停止。
方法一:
package com.hyxy.se.day13;
/*作业1:
第一个线程0输出1,2,3,4,5第二个线程1输出6,7,8,9,10 第三个线程2输出11,12,13,14,15
第一个线程输出16,17,18,19,20第二个线程输出..........第三个线程输出........直到输入75停止
线程0:12345...16 17 18 19 20 num%15/5
*/
public class Homework01 {
public static void main(String[] args) {
MyThread t1=new MyThread(0);
MyThread t2=new MyThread(1);
MyThread t3=new MyThread(2);
t1.start();
t2.start();
t3.start();
}
private static int num=0;
static class MyThread extends Thread{
private int version;
public MyThread(int version){
this.version= version;
}
public void run(){
while(num<75){
synchronized (MyThread.class){
if(num<75&&num%15/5==version){
num++;
System.out.println(version+":"+num);
}
}
}
}
}
}
案例2:
模拟小张一家四口(小张,小张媳妇,小张他爸,小张他妈)
扫描二维码关注公众号,回复:
3085780 查看本文章
分别拿着小张的银行卡去银行存取钱。
package com.hyxy.se.day13.homework;
/**
* 模拟四个人操作同一张卡,存取钱
*
* */
public class Test03 {
public static void main(String[] args) {
BankCard c = new BankCard("6225000000000000",1000);
Person p1 = new Person(c,"小张",200);
Person p2 = new Person(c,"小张媳妇",-500);
Person p3 = new Person(c,"小张老丈人",400);
Person p4 = new Person(c,"小张丈母娘",-800);
p1.start();
p2.start();
p3.start();
p4.start();
}
}
class Person extends Thread{
private BankCard card;
private double money;
public Person(BankCard card,String name,double money) {
this.card = card;
setName(name);
this.money = money;
}
public void run() {
card.handle(money);
}
}
class BankCard{
private String idcard;
private double balance;
public BankCard(String idcard, double balance) {
super();
this.idcard = idcard;
this.balance = balance;
}
/**操作银行卡方法
* money为负数:表示取钱
* money为正数: 表示存钱
* */
public synchronized void handle(double money) {
if(money+balance>0) {
balance+=money;
System.out.println(Thread.currentThread().getName()+"操作:"+money+",成功,余额:"+balance);
}else {
System.out.println(Thread.currentThread().getName()+"操作:"+money+",余额不足:"+balance);
}
}
}
案例3:
模拟火车站四个窗口卖票,固定票数100张
package com.hyxy.se.day13;
import java.awt.Window;
public class Test01 {
public static void main(String[] args) {
Ticket t=new Ticket(100);
Thread w1=new Thread("窗口1");
Thread w2=new Thread("窗口2");
Thread w3=new Thread("窗口3");
Thread w4=new Thread("窗口4");
w1.start();
w2.start();
w3.start();
w4.start();
}
}
class GO extends Thread{
private Ticket t;
public GO(Ticket t){
this.t=t;
}
public void run(){
while(t.getTicket()!=0){
t.sale();
}
}
}
class Ticket{
public static int Ticket=100;
private int windows;
public Ticket(int Ticket){
this.Ticket=Ticket;
}
public static int getTicket() {
return Ticket;
}
public static void setTicket(int ticket) {
Ticket = ticket;
}
public synchronized void sale(){
if(Ticket!=0){
Ticket--;
System.out.println(windows+"开始售票");
System.out.println("票数剩余:"+Ticket);
}
}
}