继承Thread类使用synchronized实现同步机制
package com.java.practice1;
public class TicketThread extends Thread{
static int tickets =1000;
//有票 则买票
//无票 则关闭
@Override
public void run() {
while (true){
synchronized (TicketThread.class){
if (tickets==0){
System.out.println("没票了,宝贝!");
break;
}else{
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
tickets--;
System.out.println(getName()+"卖出了一张票,还剩"+tickets+"票");
}
}
}
}
}
package com.java.practice1;
/**
* @author Fxc
* date 2023/12/12
* @deprecated
*/
public class ThreadDemo {
public static void main(String[] args) {
TicketThread t1 = new TicketThread();
t1.setName("窗口1");
TicketThread t2 = new TicketThread();
t2.setName("窗口2");
t1.start();
t2.start();
}
}
还可以使用Runable和Callable实现
抢红包
package com.java.practice4;
import java.util.Random;
public class Money extends Thread {
static double money = 100;
static int count = 3;
final static double MIN = 0.3;
@Override
public void run() {
synchronized (Money.class) {
if (count == 0) {
System.out.println(getName()+"没抢到红红包");
} else {
double prize = 0;
if (count == 1) {
prize = money;
} else {
Random random = new Random();
prize = random.nextDouble(MIN, (money - count - 1) * MIN);
}
money = money - prize;
count--;
System.out.println(getName()+"抢到了"+prize+"元");
}
}
}
}
package com.java.practice4;
public class demo4 {
public static void main(String[] args) {
Money m1 = new Money();
Money m2 = new Money();
Money m3 = new Money();
Money m4 = new Money();
Money m5 = new Money();
m1.setName("小1");
m2.setName("小2");
m3.setName("小3");
m4.setName("小4");
m5.setName("小5");
m1.start();
m2.start();
m3.start();
m4.start();
m5.start();
}
}
还需进一步优化,因为没有0.00001这种钱,优化到实现小数点后两位。