标签:public 代码块 method [] 定义 同步 修改 prot exception
/**
* @methodDesc 售票线程类
*/
public class ThreadTrain extends Thread {
// 总共又100张
private static int trainCount = 100;
protected static boolean flag = true;
@Override
public void run() {
while (trainCount > 0) {
if (flag) { // 执行同步代码块,this锁
System.out.println("flag==="+flag);
// 出售火车票
sale1();
}else {
System.out.println("flag==="+flag);
// 出售火车票
sale11();
}
flag = !flag;
}
}
// 同步代码块
public void sale1() {
// 同步代码块,包裹需要解决线程安全问题的代码块,两个线程同时访问
synchronized (this) { // 只能有一个线程进行访问,必须拿到锁的时候才能访问
if (trainCount > 0) { // 不加判断,会出现出售第101张票的情况
System.out.println(Thread.currentThread().getName() + ", 出售第" + (100 - trainCount + 1) + "张票");
trainCount--;
}
}
}
// 静态同步代码块
public void sale2() {
// 同步代码块,包裹需要解决线程安全问题的代码块,两个线程同时访问
synchronized (ThreadTrain.class) { // 只能有一个线程进行访问,必须拿到锁的时候才能访问
if (trainCount > 0) { // 不加判断,会出现出售第101张票的情况
System.out.println(Thread.currentThread().getName() + ", 出售第" + (100 - trainCount + 1) + "张票");
trainCount--;
}
}
}
// 同步方法
public synchronized void sale11() {
if (trainCount > 0) { // 不加判断,会出现出售第101张票的情况
System.out.println(Thread.currentThread().getName() + ", 出售第" + (100 - trainCount + 1) + "张票");
trainCount--;
}
}
// 静态同步方法
public static synchronized void sale22() {
if (trainCount > 0) { // 不加判断,会出现出售第101张票的情况
System.out.println(Thread.currentThread().getName() + ", 出售第" + (100 - trainCount + 1) + "张票");
trainCount--;
}
}
}
/**
* @methodDesc 多线程模拟售票问题
*/
public class ThreadDemo {
public static void main(String[] args) throws InterruptedException {
// 创建售票线程对象
ThreadTrain train1 = new ThreadTrain();
// 创建多个售票窗口,并给其取别名
Thread t1 = new Thread(train1, "窗口1");
Thread t2 = new Thread(train1, "窗口2");
t1.start();
t2.start();
}
}
public void run() {
while (trainCount > 0) {
if (flag) { // 执行同步代码块,this锁
System.out.println("flag==="+flag);
// 出售火车票
sale1();
}else {
System.out.println("flag==="+flag);
// 出售火车票
sale11();
}
flag = !flag;
}
}
public void run() {
while (trainCount > 0) {
if (flag) { // 执行同步代码块,this锁
System.out.println("flag==="+flag);
// 出售火车票
sale2();
}else {
System.out.println("flag==="+flag);
// 出售火车票
sale22();
}
flag = !flag;
}
}
标签:public 代码块 method [] 定义 同步 修改 prot exception
原文地址:https://www.cnblogs.com/luoyu113/p/10548317.html