package ThreadDemo;
//多个线程同时操作同一个对象,涉及到资源的独享与共享并发什么的
// 多个线程同时操作同一个对象,可能会出现问题:线程不安全,数据紊乱 ------>上锁
// 并发与同步
// 火车票例子
import java.util.concurrent.locks.ReentrantLock;
// synchronized 锁住的是 操作者对象; synchronized 块 锁住的是 某个属性
public class Test20_Synchronized implements Runnable{
// 定义可重入锁
private final ReentrantLock lock =new ReentrantLock();
boolean flag=true;
int ticketNums=10;
@Override
public void run() {
while (flag){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
buy();
}
}
private void buy() { // synchronized 关键字,加锁 同步。 lock()差不多
if (ticketNums<=0){
flag=false;
return;
}else {
try {
lock.lock(); // 锁住
System.out.println(Thread.currentThread().getName()+"--->抢到了第"+ ticketNums-- +"张票");
// Thread.currentThread().getName() :获得线程体的名字
}finally {
lock.unlock(); // 解锁
}
}
}
public static void main(String[] args) {
// 多个线程同时操作同一个对象,可能会出现问题------>上锁
Test20_Synchronized ticket = new Test20_Synchronized();
new Thread(ticket,"学生").start(); // 名为 学生线程体
new Thread(ticket,"老师").start(); // 老师线程体
new Thread(ticket,"黄牛").start(); // 黄牛线程体
}
}
标签:24,Thread,lock,void,线程,new,ticket
From: https://www.cnblogs.com/zhanjianhai/p/17687728.html