public class ThreadTest {
public static void main(String[] args){
Thread t1 = new Thread1(); //线程1
Thread t2 = new Thread1();//线程2
t1.start();
t2.start();
}
}
class Thread1 extends Thread{
@Override
public void run() {
super.run();
try {
BeTested b = new BeTested(); // 这地方,因为这个例子中同步监视器 obj 是线程共享的,两个线程用两个不同的对象,也没有关系,不影响结果。
b.beTested(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class BeTested {
static Object obj = new Object();;
public void beTested(Thread t) throws InterruptedException{
synchronized (obj) { // obj 为同步监视器
System.out.println(t.getName() + "------判断所取钱数是否大于余额------");
t.sleep(1000); // 如果没有同步这样能理明显地看到这两步骤不能在一个线程,同一个时间片里执行完成。
System.out.println(t.getName() + "======做减法操作,取出现金======");
}
}
}
class Thread1 extends Thread{
static BeTested b = new BeTested(); // 在这种方法中,这里必须是同个对象(static修饰),下文会详细说明
@Override
public void run() {
super.run();
try {
b.beTested(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class BeTested {
static Object obj = new Object();;
public synchronized void beTested(Thread t) throws InterruptedException{
System.out.println(t.getName() + "------判断所取钱数是否大于余额------");
t.sleep(1000);
System.out.println(t.getName() + "======做减法操作,取出现金======");
}
}
class Thread1 extends Thread{
@Override
public void run() {
super.run();
try {
BeTested b = new BeTested(); // 这里每个线程使用不同的对象。
b.beTested(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class BeTested {
static Object obj = new Object();;
public static synchronized void beTested(Thread t) throws InterruptedException{
System.out.println(t.getName() + "------判断所取钱数是否大于余额------");
t.sleep(1000);
System.out.println(t.getName() + "======做减法操作,取出现金======");
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有