package rejava3.线程;
//不安全买票,不安全取钱,ArrayList CopyOnWriteArrayList(JUC)
public class Synchronized { //synchronized 锁的是this对象,锁的不是本类的对象则用同步块;
// 一般锁需要修改的对象;
//锁里的代码越少越好
//死锁:在一个锁里锁住了另外一个锁,得到了一个对象资源同时去拿其他对象的资源,然后别人要拿这个资源就死锁卡死了
public static void main(String[] args) {
Ticket ti=new Ticket();
new Thread(ti,"我").start();
new Thread(ti,"你").start();
new Thread(ti,"他").start();
}
}
class Ticket implements Runnable{
boolean flag=true;
int ticket=10;
// @Override
// public synchronized void run() { //锁住this的对象,加一把锁排队
// while(flag) {
// if (this.ticket <= 1) {
// flag=false;
// }
// try {
// Thread.sleep(1000); //放大问题发生性
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println(Thread.currentThread().getName() + "拿到了第" + this.ticket-- + "张票");
// }
public void run(){ //锁需锁的本身
synchronized (Ticket.class){ //在此代码块里锁住括号里的对象,锁住本类对象用同步方法或同步块锁Class,其它类对象则用同步块
while(flag) {
if (this.ticket <= 1) {
flag=false;
}
try {
Thread.sleep(1000); //放大问题发生性
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "拿到了第" + this.ticket-- + "张票");
}
}
}
}
java线程Synchronized
最新推荐文章于 2023-02-19 07:15:13 发布