package Thread;
/*
* 我们使用多线程方法时,会有机会出现某一时刻都是去访问同一颗豆子问题
* 引出线程同步问题
* 我们使用关键字 synchronized 对方法或代码块进行加锁
* 对代码块进行加锁 那一段线程就变成了互斥代码块
* 需要一个不变的对象进行传参--对象叫同步监视器
* 1.使用一个静态的对象
* 2.常用这个类的静态属性 类名.class
* demo:
* 我们不让西门庆和金莲同时出门和试衣间
* 进入商场我们用方法实现
* 进入试衣间我们用代码块来实现
* 基于两个人不能同时进试衣间(排除优衣库那种情况)但是可以
*/
public class Demo4 {
static Object locker = new Object();
static int i;
public static void main(String[] args) {
Thread t1 = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
go();
System.out.println("金莲走进了商场");
System.out.println("金莲开始挑衣服");
// synchronized (Demo4.class) {
//
// }
synchronized (locker) {
}
{
System.out.println("金莲走进试衣间");
}
System.out.println("金莲结账");
}
};
Thread t2 = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
go();
System.out.println("西门庆走进了商场");
System.out.println("西门庆开始挑衣服");
synchronized (locker) {
System.out.println("西门庆走进试衣间");
}
System.out.println("西门庆结账");
}
};
t1.start();
t2.start();
}
public static synchronized void go() {
System.out.println("要出门"+i++);
}
}
Edgar--Demo4
最新推荐文章于 2024-07-08 23:44:33 发布
本文通过示例代码深入探讨了多线程环境下线程同步的重要性,特别是使用synchronized关键字对方法和代码块进行加锁的技巧。通过控制同步监视器,确保了在特定条件下线程的安全访问,避免了数据竞争和不一致的问题。
1089

被折叠的 条评论
为什么被折叠?



