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
最新推荐文章于 2024-07-16 15:32:52 发布
该博客探讨了Java中线程安全问题,通过Ticket类的不安全买票和取钱示例展示了同步控制的重要性。文中提到了使用`synchronized`关键字来保证线程安全,避免资源竞争导致的问题。同时,解释了死锁的概念,即当两个或多个线程互相等待对方释放资源而造成的僵局。示例中通过调整同步代码块来演示如何避免死锁的发生。
摘要由CSDN通过智能技术生成